2011-03-27 37 views
4
struct Dummy { 
    int x; 
    char y; 
}; 

int main() { 
    struct Dummy dum; 
    dum.x = 10; 
    dum.y = 'a'; 
} 

如何將結構成員的小端機器上的佈局?結構成員如何存儲在小型機器上?

難道是這樣的?

0x1000 +0 +1 +2 +3 
     ___________________ 
    x: | 10 | 0 | 0 | 0 |  
     -------------------  
    y: | 'a'| 0 | 0 | 0 | 
     ------------------- 
    0x1000 +4 +5 +6 +7 
+1

這相當依賴編譯器。我們不僅處理結構對齊和填充,還處理非固定寬度的數據類型。 – 2011-03-27 15:15:13

回答

6

我想你會發現this question有用。永久性通常與記憶中的一個詞相關,而不是整個結構。

4

結構佈局是受默認打包影響的編譯器實現細節。字節順序通常僅影響結構成員值中字節的順序,而不影響佈局。檢查編譯器手冊中的小字體,或使用sizeof和offsetof宏進行試驗。

你在你的問題中記錄的佈局的確是一個32位的LE編譯器很常見。

1

結構成員將在順序聲明的,與填充插入作爲必要的,這樣,每個字段爲它的類型和在端部插入作爲必要的填充適當地對準,使得在陣列中的每個後續結構正確地對準,並開始緊接着前一個結構的結束。也可能(但不太可能)在任何兩個元素之間或末尾添加不必要的填充。

每個字段本身將被存儲爲適合於編譯器和體系結構,例如類型int 10將作爲字節0a 00 00 00存儲在一個32位整數的普通小端機上。