為什麼結構體4位元組對齊的時候效率比較高

2021-09-24 11:54:49 字數 745 閱讀 1421

因為今天和同事談到了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位的,正好一次處理就完成。例如,下面的結構各成員空間分配情...