這是我的測試代碼:在struct中使用__attribute __((aligned())),爲什麼sizeof的結果是這樣的?
#include <cstdio>
struct A {
int a;
int b;
int c __attribute__((aligned(4096)));
int d;
}t;
int main()
{
printf("%d\n",sizeof(t));
return 0;
}
結果是8192,但我想不通的原因。
編譯器*不*可以隨意重新排列struct成員。 C標準要求指向'a'的指針也是一個指向封閉對象的指針,所以下面是合法的:'int * ptr = &t.a;((struct A *)ptr) - > b = 42;'因此,編譯器*不能*設法將給定的結構打包在4096字節內。 – cmaster
@cmaster重新排列成員不是使其工作的唯一方法,大小爲4096字節。編譯器可能還要求'struct A'在'4096'字節邊界之前需要一個地址'2 * sizeof(int)'。 – skyking