尋址和字節順序
對於誇多字節的程序對象,必須建立兩個規則:
- 對象的地址是什麼
- 內存中如何排列這些字節的
對象的地址:假設一個int變量佔四個字節,該變量的地址爲0x100,在C語言中地址表達式就是&x的值就是0x100,那麼在內存中該變量佔的地址就是0x100、0x101、0x102、0x103。總結就是誇多字節的對象的地址是該對象的所佔地址的起始地址。
字節排序:內存中的字節排序分爲兩種,一種是小端法,最低有效字節在最前面;一種是大端法,最高有效字節在最前面。
假設變量x的類型爲int,位於地址0x100處,十六進制爲0x01234567。地址範圍是0x100-0x103,分別用小端法和大端法表示:
使用不同的機器字節順序可能不同,這樣會產生三個問題:
- 小端法機器產生的數據發送到大端法或者反過來時,接受程序會發現,字裏的字節成了反序的。爲了避免這類問題,網絡應用程序的代碼編寫必須遵守已建立的關於字節順序的規則,以確保發送方機器將它的內部實現轉化成網絡標準,而接收方機器則將網絡標準轉爲內部表示。
- 當閱讀表示整數數據的字節序列時,字節順序也很重要,因爲從當檢查機器級代碼時,如果機器的字節順序小端法表示的,那麼閱讀時就應該從右往左讀,這樣拿到的纔是正確的數據。
- 第三種情況是當編寫規避正常類型的類型系統的程序是。