也談位元組對齊帶來效率的差異

2021-09-05 14:30:37 字數 761 閱讀 1243

from:

因為今天和同事談到了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

也談記憶體對齊

一 記憶體對齊的原因 大部分的參考資料都是如是說的 1 平台原因 移植原因 不是所有的硬體平台都能訪問任意位址上的任意資料的 某些硬體平台只能在某些位址處取某些特定型別的資料,否則丟擲硬體異常。2 效能原因 資料結構 尤其是棧 應該盡可能地在自然邊界上對齊。原因在於,為了訪問未對齊的記憶體,處理器需...

也談記憶體對齊 續

關於記憶體對齊的話題,始終是敏感的。稍有不慎,必將闖下大禍!最近專案稍顯輕閒,自己給自己安排一天反思和總結一下,突然想到以前寫過的一篇 也談記憶體對齊 那篇文章談的是記憶體對齊的基本知識以及一些實驗的資料,想必很多人看完後,會收穫一些東西,但是對記憶體對齊的應用還是處於懵懂狀態,其實大部分時間我們是...

pragma pack n 也談記憶體對齊

在最近的專案中,我們涉及到了 記憶體對齊 技術。對於大部分程式設計師來說,記憶體對齊 對他們來說都應該是 透明的 記憶體對齊 應該是編譯器的 管轄範圍 編譯器為程式中的每個 資料單元 安排在適當的位置上。但是 c語言的乙個特點就是太靈活,太強大,它允許你干預 記憶體對齊 記憶體對齊 對你就不應該再透...