15000000*2 30000000// 为什么*2 30000000/1024 29296.875//为什么/1024#include stdio.hint main(){
15000000*2 = 30000000 // 为什么*2 30000000/1024 = 29296.875 // 为什么/1024
#include <stdio.h>
int main()
{
int a[60][250][1000], i, j, k;;
for (k=0; k<1000; k++)
for (j=0; j<250; j++)
for (i=0; i<60; i++)
a[i][j][k] = 0;
return 0;
}
60*250*1000 = 15000000
15000000*2 = 30000000 // 为什么*2
30000000/1024 = 29296.875 // 为什么/1024
在终端执行ulimit -s查看liunx进程最大栈内存
结果10240
29296.875 > 10240
结果 - int a[60][250][1000]申请栈内存失败!
———>段错误!
[解决办法]
1、 *2 计算显然有问题,sizeof(int) 是 4 字节,应该 * 4
2、 / 1024 得到 kb,但是这个值仅仅是数组需要的字节数(kb),代码运行还需要额外的栈空间
3、可以用 ulimit -s xxxx 设置栈空间,你上面的这个例子,用 ulimit -s 60000 就应该能跑了
btw:初始化为全零的话,在声明的时候初始化就好了的呀,如下:
- C/C++ code
int a[60][250][1000] = { { { 0 } } }; 