2012-10-19 142 views
0

可能重複:
Struct Padding爲什麼不同結構大小的輸出是相同的?

該方案如下:

#include <iostream> 

using namespace std; 

struct node1 { 
    int id; 
    char name[4]; 
}; 

struct node2 { 
    int id; 
    char name[3]; 
}; 

int 
main(int argc, char* argv[]) 
{ 
    cout << sizeof(struct node1) << endl; 
    cout << sizeof(struct node2) << endl; 
    return 0; 
} 

且編譯器g++ (GCC) 4.6.3。輸出是:

8 
8 

我真的不明白爲什麼會這樣。爲什麼sizeof(struct node2)的輸出不是7?

+2

'node2' has padding – Musa

回答

4

這是因爲結構在邊界對齊。通常爲4個字節(儘管可以更改) - 也就是說,結構中的每個元素都是至少4個字節,如果任何元素的大小小於4個字節,則在末尾添加填充。

因此都是8個字節。

size of int = 4 
size of char = 1 
size of char array of 3 elements = 3 

total size = 7, padding added (because of boundary) = +1 byte 

for second structure: 

sizeof int = 4 
sizeof char = 1 
sizeof char array of 4 elements = 4 

total size = 8. no padding required. 
1
because of Packing and byte alignment<br/> 

一般的答案是,編譯器可以自由成員之間添加填充物對位的目的。或者我們可以這樣說,你可能有一個編譯器將所有內容對齊到8個字節。

相關問題