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