大小端對齊

2021-05-28 15:12:50 字數 839 閱讀 9162

不同的 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 的位元組序 .

大小端對齊

int num int abcd printf x n num 閒來無事,寫了上面的兩句 num會列印出什麼呢?一般分析 根據ansii碼,轉換成十六進製制,為61626364 可是輸出結果為 64636261 我們可能會懷疑指標num,printf出位址後,它和a 0 的位址一樣。然後,可能會懷疑...

mysql 大小端 記憶體大小端對齊

不同的 cpu 有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序 最常見的有兩種 le little endian 最符合人的思維的位元組序 位址低位儲存值的低位 位址高位儲存值的高位 怎麼講是最符合人的思維的位元組序,是因為從人的第一觀感來說 低位值小,就應該放在記憶...

記憶體對齊及大小端

一 記憶體對齊問題 先看乙個面試題 c union s struct b long a union s 求sizeof union s 24 sizeof struct b 32 有幾個問題需要回答,記憶體對齊的規則是什麼?這個union 物件在記憶體中資料是怎麼排列的?大端小端都一樣嗎?1 記憶體...