資料在記憶體位址是它長度的整數倍就叫位元組對齊。比如乙個整形在0x00000004(假設型別長度32)。不同的系統,資料型別的長度可能略有從差別。
型別/模型
ilp32
lp32
lp64
llp64
char88
88short
1616
1616
int32
3264
32long
3232
6432
long long
6464
6464
pointer
3232
6464
大部分的unix和linux系統 32位使用ilp32模型,64位使用lp64模型。
cpu從記憶體中讀取乙個資料,假設4位元組的整形位址再0x000000004上,一次就可以取出資料,如果4位元組的整形不對齊,在0x00000002上,那cpu需要兩次操作,一次取0x00000002-0x00000003的資料,一次取0x00000004-0x00000005的資料。這樣就會導致效率的降低。
理論上,cpu可以隨機從記憶體處理上取出任意位置的資料。但從圖中就可以看出cpu只能從特定的位置取值。想想這是為什麼呢?
未完待續。
位元組順序 位元組對齊
一.位元組順序的產生 在計算機中,資料是以位元組為單位存放的,而c語言中只有char才是乙個位元組,其他如int,float都是大於乙個位元組,所以就存在將資料按怎樣的順序存放的問題。一般有大端序和小端序兩種方式,特殊的還有混合序,也就是兩種存放方式同時存在於乙個計算機系統中。上面講的都是主機位元組...
位元組順序 位元組對齊
一.位元組順序的產生 在計算機中,資料是以位元組為單位存放的,而c語言中只有char才是乙個位元組,其他如int,float都是大於乙個位元組,所以就存在將資料按怎樣的順序存放的問題。一般有大端序和小端序兩種方式,特殊的還有混合序,也就是兩種存放方式同時存在於乙個計算機系統中。上面講的都是主機位元組...
位元組對齊 8位元組對齊
參考博文 參考1 參考2 參考3 在記憶體管理中經常使用位元組對齊來管理分配的記憶體。1 原理 2 演算法 2.1unsigned intcalc align unsigned int n,unsigned align 2.2 更好的演算法 unsigned intcalc align unsign...