GCC編譯器的位元組對齊

2021-09-25 16:44:36 字數 736 閱讀 9814

#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...