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++ 内存布局
对齐:数据对象的内存地址是否为对齐字节大小的倍数。