因為今天和同事談到了arm平台下資料匯流排寬度及對齊方式對程式效率的影響問題
在定義結構資料型別時,為了提高系統效率,要注意字長對齊原則。
正好有點感觸給大家談談 本人水平有限的很有什麼問題請朋友指正:
本文主要給大家解釋下所謂的對齊到底是什麼?怎麼對齊?為什麼會對齊或者說對齊帶來什麼樣的效率差異?
1.先看下面的例子:
#include
#pragma pack(4)
struct a
;#pragma pack()
#pragma pack(1)
struct b
;#pragma pack()
int main()
a;2) 隨便怎麼寫,一切交給編譯器自動對齊。
還有一種將邏輯相關的資料放在一起定義
**中關於對齊的隱患,很多是隱式的。比如在強制型別轉換的時候。下面舉個例子:
unsigned int i = 0x12345678;
unsigned char *p=null;
unsigned short *p1=null;
p=&i;
*p=0x00;
p1=(unsigned short *)(p+1);
*p1=0x0000;
最後兩句**,從奇數邊界去訪問unsignedshort型變數,顯然不符合對齊的規定。
在x86上,類似的操作只會影響效率,但是在mips或者sparc上,可能就是乙個error
結構體為什麼要4位元組對齊
sizeof 一 求結構體大小 這篇文章講了sizeof求結構體大小的計算方法,並給出可以套用的準則 1 結構體變數中成員的偏移量必須是成員大小的整數倍 0被認為是任何數的整數倍 2 結構體大小必須是所有成員大小的整數倍,也即所有成員大小的公倍數。二 對於巢狀的結構體,需要將其展開。對結構體求siz...
結構體為什麼要4位元組對齊
sizeof與struct 求結構體大小的計算方法 sizeof 一 求結構體大小 這篇文章講了sizeof求結構體大小的計算方法,並給出可以套用的準則 一 儲存變數時位址要求對齊,編譯器在編譯程式時會遵循兩條原則 1 結構體變數中成員的偏移量必須是成員大小的整數倍 0被認為是任何數的整數倍 2 結...
結構體4位元組對齊規則的詳解
一 四位元組對齊的規則 c 中結構體變數的儲存為什麼有個4位元組對齊的規則,這裡是假設32位機器上,cpu在讀取記憶體資料的時候4位元組對齊會取得更快的速度 這是因為 1位元組8位,4位元組正好32位,而32位機器的暫存器,位址什麼的都是32位的,正好一次處理就完成。例如,下面的結構各成員空間分配情...