GEAch3
游戏软件工程基础
3.2 c/c++的数据、代码及内存
数据
最流行的定义浮点数标准是IEEE-754,其最高有效位是符号位,紧随其后的是8位指数和23位尾数。
IEEE 32位浮点数可表示的最大值为3.403*10^38;可表示的最小非0值为1.175*10^-38。epsilon为1.192*10^-7(epsiison 表示1+e=1的最大值)。
有限精度和机器epsilon的概念,在程序设计的过程中非常有用,将该要素纳入考虑能够避免很多预期外的情况发生。
内存布局
可执行和可链接格式(executable and linkable format, ELF)是链接器创建的一种可执行文件格式。在UNIX平台上使用.elf扩展名,在Windows平台上使用.exe扩展名。
可执行映像,一般最少由以下几个段组成
- 代码段:包含程序中定义的全部函数的可执行机器码。
- 数据段:包含全部获初始化的全局及静态变量,链接器会填入适当的初始值。
- BSS段:包含全部未初始化的全局及静态变量。根据C/C++的定义,任何未初始化的全局变量和静态变量均为0。链接器只简单地存储所需零值的个数在可执行映像中。当操作系统载入程序时,会保留BSS所需的字节个数。并为该部分内存填入0。
- 只读数据段:又称
rodata段,包含所有浮点常量及所有用const声明的全局对象实例。
程序堆栈
略
对象的内存布局
对齐和包裹
数据对象的对齐是指,其内存地址是否为对齐字节大小的倍数(通常是2的幂)。对齐是重要的。因为现在许多处理器实际上只能正常地读/写已对齐的数据块。
作为一个良好的经验法则,数据类型应该需要其字节大小的对齐。包含4个浮点数的SIMD矢量通常需要16字节对齐。
整个结构的对齐需求等于其成员中的最大对齐需求。
C++中类的布局
C++中的类有别于C的结构有二
本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。