2013-10-30 43 views
0

我做了以下代碼來檢查內存中的數據分配。我有一個4 GB的RAM,我知道外部變量存儲在內存的靜態數據空間中,自動變量在堆棧中。
A gcc -v命令給出Thread model: win32。如果我使用auto_array,編程會崩潰。但它不會發生在ext_array。我如何知道stack的確切大小和內存的靜態數據空間?是否有其他因素影響分配?在內存中分配靜態和自動數組

#include <stdio.h> 
#define MB 1024*1024 

char ext_array[1*1024*MB]; 

int main() 
{ 
    //char auto_array[10*MB]; 
    return 0; 
} 
+1

更好地利用堆... – Evgeny

回答

3

這與堆棧大小有關。

對於全局陣列,在數據段中的部分是預先分配的,在程序開始。而對於自動變量,當函數(在你的情況下爲main)被調用時,它被分配。

根據您的cmd文件,最大堆棧大小將被定義。如果該大小小於1 GB,那麼在函數調用時,堆棧幀將被分配,這通常會侵入堆中。

如果你必須使用自動變量,檢查鏈接命令文件爲你的編譯&看到,如果你可以編輯堆棧大小。

+0

我怎麼會看到'連接器命令file'? – noufal

+0

谷歌它。舉例說明,你可能會得到很好的結果;因爲這不是一件很不尋常的事情.. – anishsane