我明白填充是如何工作的。我知道路線是什麼。對我來說奇怪的是,爲什麼只有char字段的結構體的大小沒有對齊到4個字節(末尾填充)?我懷疑這只是無法保證的規格,所以編譯器不這樣做。如果是這樣的話,我可以得到這種規則的參考嗎?我最感興趣的是x86和x86-64架構。sizeof c struct只有char字段
實施例:
struct foo {
char field1;
char field2;
char field3;
} foo2;
int main(void)
{
printf("sizeof=%lu\n", sizeof foo2);
}
輸出:sizeof=3
你的填充在哪裏?你有3個字符,因此你有3個字節。 – drum
結構不需要在最後填充,因爲大多數系統上的字節('char'是大多數平臺上的8位字節)可以在奇數和偶數地址上訪問,即它們的對齊方式爲'1' 。 –
在ARM OABI(apcs-gnu)中,這將是4字節對齊的。 (不要問我爲什麼,ABI沒有多大意義) –