位元組對齊訪問

2021-06-21 14:35:33 字數 1013 閱讀 8832

ü

位元組對齊定義

指令對運算元起始位址有特定的要求:

1)單位元組對齊

:單位元組型別資料

,可從任意位址取運算元

2)2位元組對齊

:2位元組型別資料

,希望從偶位址開始取運算元

3)4位元組對齊

:4位元組型別資料

,希望從能被4整除的位址開始取運算元

符合上面要求的

,稱為對齊的儲存訪問

,訪問結果正確;

反之稱為非對齊的訪問

,訪問結果將因

cpu型別而異.

ü位元組對齊要求與

cpu的架構型別緊密相關 •

powerpc

和x86

:硬體處理 1)

對齊沒有特殊要求,無論位元組對齊與否,資料讀取都不會異常 2)

在非四位元組對齊情況下,資料讀取由

cpu自動完成多次操作,處理效率會略微下降,對上層應用透明 •

mips

和arm

:軟體處理

1) 對基本資料型別強制要求對齊訪問,否則出錯

2) 對於資料結構非對齊記憶體訪問可能會異常。可以通過編譯選項(如

-funaligned

-pointers

)等軟體方法進行處理

ü 位元組對齊要求與編譯環境也緊密相關

• ansi c

對於位元組對齊方式沒有規定

,為編譯器實現時提供了靈活性 •

對於不對齊的結構型別,不同編譯器分配空間,對齊方式可能不一樣 例

1: #

pragma

pack(4)

typedef

struct

test_stru; #

pragma

pack(0) 在

ixp2350

上tornado

編譯器分配

6位元組,

intel 80x86的vc

編譯器上分配

8位元組。

CPU訪問位元組對齊

編寫可移植 需要考慮的乙個問題是如何訪問不對齊的資料。例如,如何讀取乙個儲存於乙個不是 4 位元組倍數的位址的4位元組值.i386 使用者常常訪問不對齊資料項,但是不是所有的體系允許這個,很多現代的cpu體系會產生異常。可以採用以下的函式,進行位元組對齊。include get unaligned ...

mysql位元組對齊 位元組對齊會影響記憶體訪問的效率嗎

由於c 的專案做的少,又比較小,所以一直沒有注意位元組對齊的問題,但是,位元組對齊在大規模應用中對記憶體管理和cpu執行效率的影響應是挺大的。本文根據一些資料學習,做乙個小總結。cpu執行指令時從記憶體中獲取資料是按塊操作的,塊的大小可能為2 bytes,4 bytes,8 bytes,16 byt...

位元組順序 位元組對齊

一.位元組順序的產生 在計算機中,資料是以位元組為單位存放的,而c語言中只有char才是乙個位元組,其他如int,float都是大於乙個位元組,所以就存在將資料按怎樣的順序存放的問題。一般有大端序和小端序兩種方式,特殊的還有混合序,也就是兩種存放方式同時存在於乙個計算機系統中。上面講的都是主機位元組...