不同的 cpu 有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序
最常見的有兩種
le little-endian
最符合人的思維的位元組序
位址低位儲存值的低位
位址高位儲存值的高位
怎麼講是最符合人的思維的位元組序,是因為從人的第一觀感來說
低位值小,就應該放在記憶體位址小的地方,也即記憶體位址低位
反之,高位值就應該放在記憶體位址大的地方,也即記憶體位址高位
be big-endian
最直觀的位元組序
位址低位儲存值的高位
位址高位儲存值的低位
為什麼說直觀,不要考慮對應關係
只需要把記憶體位址從左到右按照由低到高的順序寫出
把值按照通常的高位到低位的順序寫出
兩者對照,乙個位元組乙個位元組的填充進去
例子:在記憶體中雙字 0x01020304(dword) 的儲存方式
記憶體位址
4000 4001 4002 4003
le 04 03 02 01
be 01 02 03 04
例子:如果我們將 0x1234abcd 寫入到以 0x0000開始的記憶體中,則結果為
big-endian little-endian
0x0000 0x12 0xcd
0x0001 0x23 0xab
0x0002 0xab 0x34
0x0003 0xcd 0x12
x86 系列 cpu 都是 little-endian 的位元組序 .
記憶體對齊及大小端
一 記憶體對齊問題 先看乙個面試題 c union s struct b long a union s 求sizeof union s 24 sizeof struct b 32 有幾個問題需要回答,記憶體對齊的規則是什麼?這個union 物件在記憶體中資料是怎麼排列的?大端小端都一樣嗎?1 記憶體...
大小端對齊
不同的 cpu 有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序 最常見的有兩種 基本知識,回顧一下 le little endian 最符合人的思維的位元組序 位址低位儲存值的低位 位址高位儲存值的高位 怎麼講是最符合人的思維的位元組序,是因為從人的第一觀感來說 低位...
大小端對齊
int num int abcd printf x n num 閒來無事,寫了上面的兩句 num會列印出什麼呢?一般分析 根據ansii碼,轉換成十六進製制,為61626364 可是輸出結果為 64636261 我們可能會懷疑指標num,printf出位址後,它和a 0 的位址一樣。然後,可能會懷疑...