#include <stdio.h>
int main()
{
int n[100000];
int t,q;
int i,j;
char s[3][100000];
char qstr[3][200][100000];
printf("Success\n");
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,大小qstr约为57.22 MiB.当仍有超过1 GiB的可用内存时,为什么会出现Segmentation故障?如果我更改声明,qstr因为qstr[3][200][10000]程序执行没有问题,实际打印"成功",然后退出.在这种情况下,'qstr'仅占据约5.7 MiB.
我有两个问题:
我怎么知道这个限制?
鉴于我有更多的可用内存,我该如何利用它?
答案是堆栈大小.有两个记忆:堆和堆栈.
数组在堆栈中分配.您现在可以使用该ulimit -a命令进行限制.在我的系统上,我得到了stack size (kbytes, -s) 8192,最多8Mb.你可能也一样.
如果你想在堆中分配,你需要玩malloc,指针等.
例如
char* qstr = malloc(3 * 200 * 100000);
Run Code Online (Sandbox Code Playgroud)