大容量阵列宣告定义问题
开发环境: 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]; 宣告.
有什么优缺点吗?
谢谢大家解惑.