標籤:style blog color io 使用 strong 檔案 資料 sp
3.2 C/C++ 的資料/代碼及記憶體
1 IEEE-754 浮點數
32位表示的浮點數,首位是符號位,然後8位指數和23位尾數。指數儲存時加上了位移量127,尾數隱含儲存了1。
指數255表示無窮大。
2 多位元組值及字典序
大於8位的值稱為多位元組量。
小端:儲存多位元組值的最低有效位元組於較低的記憶體位置。
大端:儲存多位元組值的最高有效位元組於較低的記憶體位置。
整數位元組交換位操作:
1 inline U32 swapU32 (U32 value) 2 {3 return ( (value & 0x000000FF) << 24)
4 | ( (value & 0x0000FF00) << 8)5 | ( (value & 0x00FF0000) >> 8)6 | ( (value & 0xFF000000) >> 24);7 }
浮點數位元組交換:
1 union U32F32 { 2 U32 m_asU32; 3 F32 m_asF32; 4 }; 5 6 inline F32 swapF32 (F32 value) { 7 U32F32 u; 8 u.m_asF32 = value; 9 u.m_asU32 = swapU32 (u.m_asU32);10 return u.m_asF32;11 }
3 聲明、定義及連結規範
連結器主要功能是解決外部參考,只能報告下兩種錯誤:
1)找不到extern引用的目標,報錯“unresolved external symbol”;
2)找到兩個或以上相同名字的實體(函數或變數),報錯“multiply defined symbol”。
可以多次聲明,但只可定義一次。若在同一檔案中多次定義,編譯器報錯,在多個檔案中重複定義由連結器報錯。因此,把定義置於標頭檔中是很危險的,若被多個檔案include,會產生錯誤。
內嵌函式:內嵌函式會在調用它的地方展開,複製其機器碼。所以若內嵌函式在多個檔案中使用,應將其置於標頭檔中。
連結規範:static、內部連結、外部串連。
4 C/C++ 記憶體布局
對齊:資料對象的記憶體位址是否為對齊位元組大小的倍數。
第三章 遊戲軟體工程基礎