以下代码在2Gb机器上运行时给出了分段错误,但在4GB机器上运行.
int main()
{
int c[1000000];
cout << "done\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
阵列的大小只有4Mb.可以在c ++中使用的数组大小是否有限制?
此代码在数组声明期间产生分段错误.我很困惑为什么会这样.我故意选择2000000000作为值,因为它低于2 ^ 31并且可以适合整数变量.
int main()
{
int nums_size = 2000000000;
int nums[nums_size];
int i;
for(i = 0; i < nums_size; i++) {
nums[i] = i;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) #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.
我有两个问题:
我怎么知道这个限制?
鉴于我有更多的可用内存,我该如何利用它?