我电脑上有大约2GB的DRAM可用空间。编译std :: array或标准数组:
#include <iostream>
#include <array>
int main(int argc, char *argv[]){
// int* a = new int[500000000];
std::array<int, 2000000> a;
}
使用:
$ g++ -std=c++11 main.cpp -o main
./main
在数组中都有效。将std::array的大小更改为:
// ceteris paribus
std::array<int, 2095300> a;
导致:
$ ./main
Segmentation fault (core dumped)
老实说,我不确定这个问题是否已经在其他地方解决过。
据我了解,std :: array是在堆栈上创建的,而int * ...数组则在堆上创建。现在我的猜测是,也许我的堆栈大小只有大约8MB,相比于2GB的堆来说显得不成比例。因此我也尝试了以下操作:
//int a[2096000];
这也会导致分段错误。那么我的问题是,什么引起了分段错误?
提前感谢你。
std::array
并不合适。 - Neil Kirkstd::array<int, 2000000>* a = new std::array<int, 2000000>();
,但我不建议这样做(而是使用适当大小的std::vector<int>
)。 - πάντα ῥεῖunique_ptr
或shared_ptr
。 - PeterT