나는 약. 내 컴퓨터에 2GB의 무료 DRAM.C++ 세그먼트 오류 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
작동하는 표준 : : 배열 또는 표준 배열 중 하나를 컴파일. 에 성병의 크기 : 배열 변경 : 솔직히
$ ./main
Segmentation fault (core dumped)
, 나는이 문제가 이미 어딘가에 해결되었는지의 여부를 확실하지 않다 :
// ceteris paribus
std::array<int, 2095300> a;
하는 리드.
내 이해에서 std :: array는 스택에 생성되고 int * ... 배열은 힙에 만들어집니다. 이제 내 생각 엔 제 스택이 단순히 8 메가 바이트보다 크지 않고, 2GB 힙이 불균형하게 들리는 것과 비교했을 것입니다. 따라서 나는 또한 시도했다 :
//int a[2096000];
또한 세그먼트 결함을 일으킨다. 그래서 내 질문은 무엇이 세그멘테이션 오류를 일으키는가?
미리 감사드립니다.
스택 오버 플로우 가능성이 가장 높은 벡터를 사용하십시오. – Borgleader
stackoverlow, 프로그램의 스택 크기를 늘립니다. –
컴퓨터에 2GB RAM이있을 수 있지만 사용 가능한 스택 크기는 확실히 작습니다. –