爲什麼如果我們在全局或函數範圍中聲明堆棧變量,會有什麼不同?由於堆棧溢出,兩個示例崩潰之一。但只有在範圍內定義變量的那個。在全局/函數範圍中聲明變量。堆棧差異?
不會崩潰:
constexpr size_t MAX = 1000000; // Customise
int main()
{
int arr[MAX];
return arr[MAX - 1];
}
不會崩潰:
constexpr size_t MAX = 1000000; // Customise
int arr[MAX];
int main()
{
return arr[MAX - 1];
}
信息:Cygwin的,GCC 4.9
編輯:所以我知道,第二個例子已經是在數據存儲分割。數據段有多大?它可能像堆區一樣大嗎?
「爲堆棧變量不同的」 - 好,因爲第二個*不是*堆棧變量。堆棧的大小是有限的,相對於整個程序的容許大小來說非常小。這是爲非常大的數組使用['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)的好理由。 – BoBTFish
全局變量實際上並不是堆棧變量。他們分配在加載時間。此外,似乎不應該崩潰,當我測試它沒有。 –
希望[this](https://en.wikipedia.org/wiki/Data_segment#Program_memory)有所幫助。 –