[問題] 大容量陣列宣告定義問題
大容量陣列宣告定義問題
開發環境: linux
我在一個函式內使用動態記憶體配置定義一個
2維double陣列.其容量大小為
size_xyz*19=7296,000
執行時程式會報 'segmentation fault' 訊息.
發現執行到如下所示的for loop 程式就掛了.
double **f;
f= (double **) calloc(size_xyz, sizeof(double *));
if (f== 0) fatal_err("cannot allocate f", -1);
for(int pos=0; pos < size_xyz; pos++)
{
f[pos] = (double *) calloc(19, sizeof(double));
if(f[pos] == 0) fatal_err("cannot allocate f[]", -1);
}
稍微google一下發現也許透過bash檔的設定
解除可使用記憶體容量的限制, 或者,更改編譯器
的參數設定加大stack size 問題也許可以解決.
bash 檔我已經改了. 但是沒有功效.
目前使用 Intel compiler 不知道編譯器參數
如何設定.
還是說像這種大型陣列最好用多個維度打散定義?
譬如將目前的2維陣列變3維.
再問, 像這種已知大小的陣列其實也沒必要用
動態記憶體配置. 簡單的使用
double f[size_xyz][19]; 宣告.
有什麼優缺點嗎?
謝謝大家解惑.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.73.151.64
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1526892817.A.EE7.html
→
05/21 17:00,
7年前
, 1F
05/21 17:00, 1F
→
05/21 17:00,
7年前
, 2F
05/21 17:00, 2F
→
05/22 03:31,
7年前
, 3F
05/22 03:31, 3F
推
05/22 04:44,
7年前
, 4F
05/22 04:44, 4F
→
05/22 04:44,
7年前
, 5F
05/22 04:44, 5F
→
05/22 07:16,
7年前
, 6F
05/22 07:16, 6F
→
05/22 07:16,
7年前
, 7F
05/22 07:16, 7F
→
05/22 07:16,
7年前
, 8F
05/22 07:16, 8F
推
05/22 10:50,
7年前
, 9F
05/22 10:50, 9F
推
05/22 11:00,
7年前
, 10F
05/22 11:00, 10F
→
05/22 11:00,
7年前
, 11F
05/22 11:00, 11F
推
05/22 11:07,
7年前
, 12F
05/22 11:07, 12F
→
05/22 11:44,
7年前
, 13F
05/22 11:44, 13F
→
05/22 11:45,
7年前
, 14F
05/22 11:45, 14F
→
05/22 11:46,
7年前
, 15F
05/22 11:46, 15F
→
05/22 11:47,
7年前
, 16F
05/22 11:47, 16F
推
05/22 11:47,
7年前
, 17F
05/22 11:47, 17F
→
05/22 11:48,
7年前
, 18F
05/22 11:48, 18F
→
05/22 11:49,
7年前
, 19F
05/22 11:49, 19F
→
05/22 11:49,
7年前
, 20F
05/22 11:49, 20F
→
05/22 11:50,
7年前
, 21F
05/22 11:50, 21F
→
05/22 13:57,
7年前
, 22F
05/22 13:57, 22F
推
05/23 09:06,
7年前
, 23F
05/23 09:06, 23F