我對沒有參數的結構對齊屬性有一些疑問。當聲明一個像下面給出的對齊結構時。在16位目標上沒有參數和對齊的結構對齊
struct __attribute__ ((aligned))
{
char a;
}s;
printf("%zu\n",sizeof(s));
輸出根據下面的鏈接爲16
。 http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Type-Attributes.html
編譯器會自動將該類型的對齊方式設置爲您正在編譯的目標機器上的任何數據類型所使用的最大對齊方式。
這意味着我不能聲明大於16字節的對齊方式。但是,如果我給
struct __attribute__ ((aligned(32)))
{
char a;
}s;
printf("%zu\n",sizeof(s));
然後我得到的輸出32
這意味着我們可以宣佈大於16字節對齊。
那麼爲什麼要獲得16個字節?它是編譯器特定還是目標特定?
在16位系統上的對齊 - 我讀了16位系統上不會有任何對齊問題。誰能告訴我爲什麼?
我想你誤解了「數據類型」。自動對齊是針對該體系結構原生的最大整數,浮點或指針大小。你顯然可以在更大的邊界上對齊,但它不會讓你獲得性能。 – Kevin