尽管有无限的ulimit,为什么非常大的堆栈分配会失败?
发布时间:2020-12-14 02:20:55 所属栏目:Linux 来源:网络整理
导读:以下静态分配给出了分段错误 double U[100][2048][2048]; 但是下面的动态分配很顺利 double ***U = (double ***)malloc(100 * sizeof(double **));for(i=0;i100;i++){ U[i] = (double **)malloc(2048 * sizeof(double *)); for(j=0;j2048;j++) { U[i][j] = (
以下静态分配给出了分段错误
double U[100][2048][2048]; 但是下面的动态分配很顺利 double ***U = (double ***)malloc(100 * sizeof(double **)); for(i=0;i<100;i++) { U[i] = (double **)malloc(2048 * sizeof(double *)); for(j=0;j<2048;j++) { U[i][j] = (double *)malloc(2048*sizeof(double)); } } linux中的ulimit设置为无限制. 有人能给我一些暗示发生什么事吗? 解决方法
当你说ulimit设置为unlimited时,你使用-s选项吗?否则,这不会更改堆栈限制,只会更改文件大小限制.
但是,无论如何都会出现堆栈限制.我可以分配: double *u = malloc(200*2048*2048*(sizeof(double))); // 6gb contiguous memory 运行二进制文件我得到: VmData: 6553660 kB 但是,如果我在堆栈上分配,它是: double u[200][2048][2048]; VmStk: 2359308 kB 这显然不正确(暗示溢出).使用原始分配,两者给出相同的结果: Array: VmStk: 3276820 kB malloc: VmData: 3276860 kB 但是,运行堆栈版本,无论数组的大小如何,我都无法生成段错误 – 即使它超过系统上实际的总内存,如果设置了-s unlimited. 编辑: 我在循环中使用malloc进行了测试,直到失败: VmData: 137435723384 kB // my system doesn't quite have 131068gb RAM 但是,堆栈使用率从未达到4gb以上. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |