在VC++中,爲什麼編譯器只在使用非char數據類型時填充struct?C++編譯器對齊 - 只是字符沒有填充
I.e.
struct TEST
{
char a[7];
};
struct TEST2
{
__int32 a;
char b[7];
};
sizeof(TEST); // Returns 7
sizeof(TEST2); // Returns 12
在VC++中,爲什麼編譯器只在使用非char數據類型時填充struct?C++編譯器對齊 - 只是字符沒有填充
I.e.
struct TEST
{
char a[7];
};
struct TEST2
{
__int32 a;
char b[7];
};
sizeof(TEST); // Returns 7
sizeof(TEST2); // Returns 12
這歸結爲事實,即sizeof(char) == 1
- 總是。
數組必須是連續的,所以在一個char數組中(如果它足夠大),最終會得到每個可能對齊的元素。由於編譯器/硬件有使其工作,有不能是需要插入填充來處理char
在某事像struct
要麼。
現在,這並不是說編譯器不能插入填充。例如,即使使用char數組,也可以通過這樣做來提高性能。例如,給定你的struct
定義,編譯器將你的7個字符的數組再加上一個來構造結構體8的大小是完全可以接受的 - 這是一個漂亮的2的整數次方。
在某些硬件,你很可能會看到這一點。碰巧,由VC++支持的英特爾硬件並沒有真正從這樣的事情中獲益,所以你不太可能在那裏看到它。
這完全是編譯器特有的。你在測試什麼編譯器? – templatetypedef
哦,沒有意識到! VC++。 – Qix