2014-05-20 40 views
3

我想聲明尺寸爲1000 * 1000的4個2-D數組(4 * 10^6 * 4個字節,考慮int)。最初,當我在main()函數中聲明這些數組時,我遇到了分段錯誤。爲什麼g ++在聲明本地函數時聲明大數組時顯示分段錯誤,而在全局聲明時它工作正常?

後來我在全局聲明瞭這些數組,並且程序工作正常。爲什麼這樣呢?

+10

歡迎來到stackoverflow,您可以提出有關* stack overflows *的問題,這就是您所得到的。 –

+0

(並且請用你正在使用的語言標記你的問題) – Mat

+0

@Mat恥辱這個問題及其答案是可怕的。 –

回答

5

當在函數中聲明大數組時,它們被存儲在棧幀上,其大小並不是很大(不知道確切的值)。

而當該陣列被全局聲明的,它被存儲在數據(如果該變量被初始化)和BSS(如果不是初始化)。 Data和bss的大小非常高(不知道確切的值),這就是爲什麼他們可以容納大數組聲明。

+0

AFAIK大多數編譯器讓您獲得單個堆棧幀2MB。 – dhein