一.位元組順序的產生
在計算機中,資料是以位元組為單位存放的,而c語言中只有char才是乙個位元組,其他如int,float都是大於乙個位元組,所以就存在將資料按怎樣的順序存放的問題。一般有大端序和小端序兩種方式,特殊的還有混合序,也就是兩種存放方式同時存在於乙個計算機系統中。
上面講的都是主機位元組順序。
網路位元組順序是指在網路中傳輸資料的所遵循的位元組順序。tcp/ip採用的是大端序。
二.大端序和小端序
大端序是指資料的低位儲存在高位址,資料的高位儲存在低位址。對於0x1122,採用大端序進行儲存,則如左圖所示
小端序是指資料的低位儲存在低位址,資料的高位儲存在高位址。對於0x1122,採用小端序進行儲存,則如右圖所示
在linux下可以採用下面的程式段知道它所採用的位元組順序:
#includeusing namespace std;
int main(void)
{ int num=0x12345678;
char *p=(char *)#
if(*p==0x12&&*(p+1)==0x34)
cout<
1.產生的原因
cpu為了高效的讀取資料,要求資料的存放的起始位址是它所占用空間的整數倍。例如,乙個double型變數,如果存放的起始位址不是8的整數倍,那麼就要兩次讀取訪問記憶體,而如果起始位址是8的倍數,只需要一次訪問記憶體。
2.自然對齊
i.各成員變數存放的位址相對於結構的起始位址的偏移量為sizeof(型別)或其整數倍。
ii.結構的總大小是其成員中最大型別的sizeof(該型別)整數倍。
所以在定義結構體時最好把結構中的變數按照型別大小從小到大宣告,以減少中間的填補空間。
3.強制對齊
強制對齊是程式設計師通過#pragma pack(n) 設定對齊係數。
如果n大於等於結構體中最大成員所佔的空間,那麼就跟自然對齊是一樣的效果;
如果n小於結構體中最大成員所佔的空間,那麼每個成員如果不必按最大成員所佔空間對齊,只需要按n對齊就可以。最終結構體的大小必然是n的整數倍。
位元組順序 位元組對齊
一.位元組順序的產生 在計算機中,資料是以位元組為單位存放的,而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...