2015-07-10 70 views
0

疑問:執行程序期間的數據段

如果我們執行一個程序,以下是分配給該程序的內存類型。

          __________________ 
              |    | 
              |  stack  | 
              |    | 
              ------------------ 
              |    | 
              | <Un Allocated| 
              |  space> | 
              ------------------ 
              |    | 
              |    | 
              |  Heap  | 
              |    | 
              |    | 
              __________________ 
              |    | 
              |  data  | 
              __________________ 
              |  text  | 
              __________________ 

這裏的數據段發揮了至關重要的作用。所有初始化的數據和未初始化的數據都存在於數據段中。但是,我不知道在數據段中存儲數據的順序。對於Ex,初始化數據,未初始化數據,只讀和讀取寫入數據。我認爲以上是數據段中存在的四種類型。

所以,數據的順序將放在數據段中。就像第一次初始化數據的地址少於全部。接下來是未初始化的數據,其地址高於初始化數據的地址。

在此先感謝。

+1

ummmm..where是這裏的編程問題嗎? –

回答

0

無法預先確定數據段中全局變量的順序 - 取決於鏈接器和編譯器。通常,鏈接程序保留變量在鏈接目標文件中出現的順序,但這並不是一個硬性要求(例如,鏈接程序可以首先放置double變量,最後放置char以節省所需的對齊字節)。

未初始化的全局數據通常出現在.bss段中,該段位於.data段之後(在您的圖片中,「在其上方」,因爲圖片的較高部分=更大的地址)。 .bss段全部爲零,只有其大小存儲在可執行文件中。這樣,我們不需要在二進制圖像中存儲長串零。