#include /*
由於在x86(32位機器)平台下,gcc編譯器預設按4位元組對齊,
如: 結構體4位元組對齊,即結構體成員變數所在的記憶體位址是4的整數倍
可以通過使用gcc中的__attribute__選項來設定指定的對齊大小。
1):__attribute__ ((packed)),讓所作用的結構體取消在編譯過程中的優化對齊,
按照實際占用位元組數進行對齊。
2):__attribute__ ((aligned (n))),讓所作用的結構體成員對齊在n位元組邊界上。
如果結構體中有成員變數的位元組長度大於n,則按照最大成員變數的位元組長度來對齊。
*/struct person1 ;
struct person2 __attribute__ ((packed));
struct person3 __attribute__ ((aligned (4)));
int main()
上面的**在32位機器上列印出:
sizeof(char ) = 1
sizeof(int ) = 4
sizeof(char * ) = 4
sizeof(char **) = 4
sizeof(struct person1) = 12
sizeof(struct person2) = 9
sizeof(struct person3) = 12
編譯器與位元組對齊
編譯器版本 gcc 4.1.2 vc 6.0 上次研究了結構體和位元組對齊的問題,不過有個復合結構體有點奇怪。pragma pack 8 struct s1 struct s2 pragma pack 在gcc下,sizeof struct s2 20,但在vc 6.0下卻是24 其實,這個牽扯到了...
關於C編譯器裡位元組對齊的問題
宣告 只是為了方便個人學習用 首先是來自http blog.csdn.wenddy112 articles 300583.aspx 通過 pragma pack n 改變c編譯器的位元組對齊方式 上的乙個問題 對於下面的結構體 struct test 結構各成員空間分配情況是怎樣的?文章中解釋 結構...
gcc編譯器簡介
在linux中選擇gcc編譯器的原因是gcc執行效率高。gcc基本用法 gcc options filename 其中options為編譯選項。例子 執行指令 gcc hello.c 則對hello.c進行編譯,如果程式沒有語法錯誤,則產生可執行檔案a.out gcc預設檔名 執行可執行檔案指令 a...