改變編譯器字節對齊條件的簡單說明

要改變編譯器默認的字節對齊方式,Linux下可使用一下兩種方法:

一:

#pragma pack (n)   //C編譯器將按照n個字節對齊。
#pragma pack ()   //取消自定義字節對齊方式


例如:

#pragma pack(1) //一下內容按1個字節對齊

struct Test

{

    char a;

    int b;

}

#pragma pack() //恢復默認



二:

__attribute((aligned (n)))      //讓所作用的結構成員對齊在n字節自然邊界上。如果結構中有成員的長度大於n,則按照最大成員的長度來對齊。

__attribute__ ((packed))     //取消結構在編譯過程中的優化對齊,按照實際佔用字節數進行對齊。

例如:

struct Test1

{

    char a;

    int b;

}__attribute((aligned (1)));

//此時結構體大小爲8(假設int大小爲4),因爲int的大小大於1,所以a按大小爲4算。

struct Test2

{

    char a;

    int b;

}__attribute((packed));

//此時結構體按實際佔用字節數進行對齊,大小爲5.


如有不對的地方,請大家指出。











發佈了30 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章