寫程式的朋友們一定聽過 big endian, little endian, 但是可能沒什麼機會看到 big endian 的機器, 目前主流的 x86, arm 幾乎都是 little endian 的設計, 早期 apple 電腦的 cpu 是 powerpc (這是我為什麼之前買了 3 台 powerpc apple 電腦的原因之一, 我想看看什麼是 big endian 電腦), 這是 big endian 的 cpu, 我們來看看和 little endian 的機器有什麼不同, 一樣讓程式碼來說話。
a.cpp 是這次的範例程式, 就這麼簡單, 宣告一個 int i 而已, 程式雖然簡單, 但能幫助我們理解 big endican, little endian。
我的環境不是 mac os X, 而是 linux, 這個版本的 linux 是 powerpc 的版本, 一樣安裝gnu toolchain, 就算是用 apple notebook, 我也能使用熟悉的 toolchain, 將平台的差異性降到最低。
硬體平台是 fig 1 的 powerpc apple notebook, 俗稱的「大白」, 忘記在 200x 購入, 是二手機器, 28000 nt, 有獨立顯示卡, ati 的, 在裝 linux/X 時遇到很大問題, X 無法完全發揮該張顯示卡的功能, 我的 X 老是頓頓的。
拉回來, 想法是這樣: 將程式編譯後, 透過 gdb 來觀察變量變數 i 怎麼擺放 0x12345678, 觀察 big endian, little endian 在記憶體中的排列方式有什麼不同。有了真實機器的驗證, 相信更能理解其中的不同。
list 1. big endian i 的最高位位元組是 0x12 存儲在最低的記憶體位址處 (0xbfff f0d8)
list 2. little endian i 的最高位位元組是 0x12 存儲在最高的記憶體位址處 (0xffffd307)
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。