2011-04-25 85 views
4

我知道BSS段存儲未初始化的全局和靜態變量並將它們初始化爲零。但是如果全局/靜態變量被初始化,而我的第二個問題是我讀了BSS段沒有消耗內存,那麼它在那裏存儲這些變量呢?謝謝BSS段存儲什麼?

回答

7

您可能讀到BSS段不會消耗磁盤上的可執行文件中的空間。當可執行程序加載時,BSS段肯定是確實消耗內存中的空間。 OS加載器分配空間並初始化爲零。

+0

嗨格雷格,謝謝你的回覆。如果全局/靜態變量被初始化,那麼存儲在哪裏呢? – hue 2011-04-25 06:35:22

+1

如果初始化很簡單(就像一個數字),那麼它通常存儲在可執行文件(數據段)中。如果初始化更復雜(例如C++字符串),則在程序啓動時運行代碼以初始化該值。 – 2011-04-25 06:36:41

+0

所以我還有一個問題,那麼堆是在哪裏存儲的。它是數據部分的一部分嗎? – hue 2011-04-25 07:02:44

2

如果初始化,全局/靜態變量存儲在.DATA段中。當您在.DATA段中聲明數據時,您將爲這些數據提供值,以便將其存儲爲可執行文件的一部分。

另一方面,由於您不需要知道這些值是什麼,因此您只需聲明.BSS需要多少數據。因此,如果您的程序聲明2 GB未初始化的內存,則2 GB不會影響可執行文件的大小,直到加載後纔會看到它。

相關問題