[英]C++ Segmentation fault std::array
我大约。 我的计算机上有2 GB的免费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大,而与2 GB的堆相比听起来不相称。 因此我也尝试了:
//int a[2096000];
这也会导致分段错误。 所以我的问题是,导致细分错误的原因是什么?
先感谢您。
您正在堆栈上放置一个大数组,导致堆栈溢出。
您可以设置堆栈的大小 : 在使用GNU编译器进行编译的过程中,更改Linux中C ++应用程序的堆栈大小 。 但是,更好的选择可能是使用堆。
它只是听起来有点不相称,所述堆栈是如此小得多然后[原文如此]堆。
堆栈是实际分配的内存,这意味着您不希望它大于实际需要的容量,因为如果将内存用于堆栈,则它将无法用于其他用途。 另一方面,除非实际请求堆,否则堆不会占用内存,因此允许堆潜在地占用地址空间的很大一部分就可以了。
通常,堆栈也不需要太大,因为函数调用的最大深度通常不会那么高。 几兆字节几乎总是绰绰有余。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.