繁体   English   中英

C ++分段错误std :: array

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM