第三章 游戏软件工程基础

时间:2021-05-14 03:28:09

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++ 内存布局

  对齐:数据对象的内存地址是否为对齐字节大小的倍数。