為了使CPU訪問數據更加高效,編譯器在編譯程序時會自動進行對齊操作(GCC默認4字節對齊,windows VC默認8字節對齊),所謂對齊即讓數據的首地址是數據長度的整數倍,如int 的長度是4 ,則其首地址應該能被4整除。
#include <stdio.h> pack(4) //設置4字節對齊 pack() //恢復編譯器默認對齊 main(, (
運行結果
# ./
結果分析:
結構體test_struc中最長元素占長度為sizeof(short)=2 字節,
char a ------------2字節
short b -----------2字節
char c ------------2字節
#include <stdio.h> main(, (
運行結果:
#./
結果分析:
__attribute__((aligned(4)))是強制4字節對齊,不管結構體本身元素的最大大小是多少,結構體總體大小必須是 4的整數倍
char a --------------2字節
short b -------------2字節
char c ---------------4字節