本文主要介绍C/C++知识点——C++在游戏引擎中的《游戏引擎架构》阅读笔记,并通过具体内容向大家展示。 希望对大家学习C/C++知识点有所帮助。
两年前买了《游戏引擎架构》,粗略看了一遍,因为想学习引擎的底层知识,所以又找到这本书看了一遍游戏引擎架构 密码,并根据自己的理解写了一些读书笔记在此与大家分享。
闲话少说,下面开始本文的内容。 本书的第一部分是基础篇。 第一章概述了一些引擎概念,第二章讲解了一些工具(VisualStudio等)的使用,第三章介绍了C++,与一般的C++书籍不同,本书讲解的C++更多的是一些常用的概念在引擎方面,也包含了软件工程的一些基本思想。 笔者认为以下几点比较重要
首先是“让错误的程序明显”游戏引擎架构 密码,这部分在介绍编码标准的时候介绍过,推荐一篇文章——“让错误的程序明显”
然后是对象的内存布局,这对程序性能优化会有很大的帮助。 在 class 和 struct 中游戏角色,编译器不会将数据程序员紧紧地打包在一起,因为每种类型的数据都有其自然对齐方式,以便 CPU 高效地从内存中读取/写入。 对齐意味着内存地址是对齐字节大小的倍数。 此外,编译器可能会在末尾添加填充以对齐数组。 以下是32位系统中各类型的大小(单位:字节):
整数:4字节; 浮点数:4字节; 双:8字节; 布尔值:1 个字节; 字符:1个字节; 短:2个字节; long:4字节或8字节
需要注意的是,当类中有虚函数,或者继承类中有虚函数时,通常会在类布局的最前面加上一个虚表指针,指向一个名为虚函数表结构的数据,因为指针是 int 类型。
理解内存布局的意义在于,我们在编写类和结构体时3D素材,最优化的处理方式就是按照内存布局规则来安排数据,从而减小类或结构体的大小。
另外需要说明的是类型大小的问题,因为标准的C++基本数据类型设置为可移植的,所以没有明确的规定。 在游戏引擎的开发中,有时需要知道一些变量的确切大小。 大多数游戏引擎的基本数据类型都会被自定义; 另外,还有big-endian和little-endian的转换问题,比如Wii、Xbox360、PS,使用PowerPC开发small-endian设备,可能会涉及到数据转换问题。
最后介绍错误检测和处理的实现,将断言分为两个宏,方便在release版本中关闭不需要的断言,避免不必要的效率损失。
本文由帖子坐标整理发布,希望对同学们有所帮助。 更多详情请关注坐标编程语言C/C+频道!