【发布时间】:2016-03-30 04:48:34
【问题描述】:
#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");
}
在上面的代码中,qstr 的大小约为 57.22 MiB。当超过 1 GiB 的可用内存仍然可用时,为什么会出现分段错误?
如果我将qstr 的声明更改为qstr[3][200][10000],则程序执行没有问题,并且实际打印“成功”,然后退出。在这种情况下,“qstr”仅占用大约 5.7 MiB。
我有两个问题:
我怎么知道限制?
鉴于我有更多可用内存,我该如何利用它?
【问题讨论】:
-
提示在网站上 :-)
-
您不能在堆栈上分配所有内容。线程堆栈通常限制在 1-2MB。您需要在堆上分配大对象。
标签: c