我正在嘗試創建一個int整型向量的數組,但是我在這段代碼中遇到了一個段錯誤。爲什麼此數組分配會導致段錯誤?
int main() {
vector<int> x[1000000];
}
我認爲這是因爲我超過了堆棧大小,所以我使用動態分配,它似乎解決了這個問題。但是,爲什麼這樣工作:
vector<int> x[1000000];
int main() {
// do nothing
}
和這項工作?
int main() {
static vector<int> x[1000000];
}
這是因爲變量分配在數據段上,而不是堆棧上 –
因此,全局變量和靜態變量總是分配在堆上? – CSGregorian
看一看程序解剖學的[this](http://static.duartes.org/img/blogPosts/linuxFlexibleAddressSpaceLayout.png)圖像。在你的第一個實現中,內存分配在堆棧上,根據圖片,它有8MB的限制(不同的機器可能有不同的限制)。數據段大於8MB,因此在嘗試分配這種矢量時不會出現錯誤 –