大容量陣列宣告定義問題
開發環境: 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]; 宣告.
有什麼優缺點嗎?
謝謝大家解惑.