代碼:C語言中的字節對齊

【宏思微想:科技生活,技術開發】

一. 對齊目的:

1.節省空間。2.提高訪問速度。3.硬件設計的要求或者軟件算法的要求。

二. 如何更改對齊:

· 使用偽指令#pragma pack (n),C編譯器將按照n個字節對齊。

· 使用偽指令#pragma pack (),取消自定義字節對齊方式。

或者:

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

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

三.對齊原則:

1.數據類型自身的對齊值:

對於char型數據,其自身對齊值為1,對於short型為2,對於int,float,double類型,其自身對齊值為4,單位字節。

2.複雜類型(如聯合,結構體或者類)的自身對齊值:其成員中自身對齊值最大的那個值。

3.指定對齊值:#pragma pack (value)時的指定對齊值value。

4.數據成員、複雜類型(如聯合,結構體或類)的有效對齊值:自身對齊值和指定對齊值中小的那個值。

5.整個數據成員,複雜類型(如聯合,結構體或類)的對齊值:是成員中對齊值的整數倍。

四. 編程規則:

基本的原則就是把結構中的變量按照類型大小從小到大聲明,儘量減少中間的填補空間。

範例:

struct A

{

char b;

short c;

int a;

};

struct B

{

char b;

int a;

short c;

};

sizeof(strcut A) == 8

sizeof(strcut B) == 12 //根據對齊原則5,所以補齊成12B。

代碼:C語言中的字節對齊

——————(完)——————

相關推薦

推薦中...