博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
game engine architecture---chap2---chap3.2
阅读量:5904 次
发布时间:2019-06-19

本文共 1510 字,大约阅读时间需要 5 分钟。

  hot3.png

 


 

tools内容比较多,但是分值得记录的比较少,目前看来只有说ibm的purify和quantify是不错的工具,可能的话,项目里面可以使用以下。

 

 


 

3,fundamentals of software engineering for games

 

 

 


 

3.1 c++

 

重申个原则就是一般来说组合由于继承。

design pattern是好东西,但是需要好好理解,恰到好处的用----不用听没有充分理解的喷子的话。

像singleton,iterator这些,战斗力刚刚的,该用就用。

 

 


 

3.2 data code and memory

 

这部分float是个很好的复习,也对编程很有帮助,历史上也在float上犯过错误,也见到别人犯错误:

float = s*pow(2, e-127)*(1+m)

s---符号,最左边的1位

e---接下来8位

mantissa----最右边剩下的23位

float最大大约表示到3×pow(10,28),最小(绝对值)比较关键是pow(2,-126),这个也可以叫machine epsilon,是大于0的最小的positive的float值。

 

 


 

一些compiler specific types

有一些是compiler指定的类型,也在游戏中常常用到,实际上我个人也是更喜欢这种:

像vs compiler用的_int8, _int16这种

 

simd types:

会有类似_m128这样的类型。

 


 

3.2.3 c++ memory layout

这一块给力!

1st executable image

这一块在内存中的分布,会分成这么几种:

  • text(code) segment----放machine code
  • data segment----有被初始化的global variable(包括static)
  • bss segment----没被初始化的global variable放在bss segment,因为默认值是0,所以统一隔离出来作为一种优化,所以不必要的话就不要初始化global variable了,还可以省点内存
  • read only segment----const的东西(包括基本类型像const float或者class instance const blan a; )放在这里,但是const int除外,这个是直接放在code里的

 

2nd program stack

调用新函数的时候会做这样的事情:

  • 保留return address
  • backup register value,这样新函数也可以用这些备份过的register了

3rd packing

编译器会给成员加一些pack位来提高cache和cpu读取效率。

pack的基本原则就是class里面的member和其本身都会align到其自己大小,一些例子,做面试题挺好的:

class pad{char a};---1byte

class pad{char a; int b;}----8byte

class pad{int a; char b;}----8byte

class pad{double a; char b;} -----16byte

class pad{double a; int b; } 16byte

也就是说对类内部数据的重新排列有可能会降低内存消耗,很有用的知识点。

 

4th class的内存

 

virtual table ptr

dad class

kid class

这样一个排列。

 

原文链接:

转载于:https://my.oschina.net/dtec/blog/44544

你可能感兴趣的文章
sshtunnel在本地访问云服务器mysql
查看>>
小蚂蚁学习APP接口开发(1)—— json方式封装通信接口
查看>>
我的友情链接
查看>>
CDN相关
查看>>
Tomcat的设置4——Tomcat的体系结构与设置基于端口号的虚拟主机
查看>>
三种判断端口存活的方法和链接200的判断方法
查看>>
我的友情链接
查看>>
ftp协议基础
查看>>
顺时针打印矩阵
查看>>
访问共享经常中断
查看>>
人生的交易
查看>>
MySql
查看>>
算法分析与设计——贪心法实验报告
查看>>
js时间戳与日期格式的相互转换
查看>>
POJ - 1062 昂贵的聘礼(Dijkstra)
查看>>
Java多态和动态绑定是如何实现的
查看>>
sql server 下载安装标记
查看>>
Android学习6—单元测试的使用
查看>>
js运算符(运算符的结合性)
查看>>
最长上升子序列问题
查看>>