游戏之旅-我的编程感悟

本文探讨了游戏开发中的编程感悟,包括搜索算法、职能算法、汇编优化策略。强调了局部变量、常量优化、内联函数和const的重要性。此外,还解释了为何需要脚本以及脚本在游戏开发中的作用,如灵活性、代码复用和降低开发门槛。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搜索算法
1.地图寻路问题(A,A*,IDA*)
2.博弈问题(Alpha-Beta剪枝,SSS*,MemSSS*)

职能算法
1.遗传算法
2.模拟退火
3.禁忌搜索
4.人工神经网络


汇编优化:
能用整数,则尽量不用浮点数;
循环展开技术(比如100次降到50次):由于现代CPU具有分支预测技术,循环展开增加了代码量,更多占用CPU内部一级代码高速缓存的空间,循环展开远远不如原来有效。
局部变量在堆栈中,这样可以重复使用内存,当一块内存被反复读写,其数据就会存在CPU的内部一级缓存中,访问速度非常快。而零散的静态变量则没有这个优势。内存同CPU内部缓存的数据交换,往往成为程序的速度瓶颈。


除2的整数幂可以被优化成移位操作,但是我们并不主张把n/8写成n>>3,因为现代编译器会帮你做这件事。这里需要注意的是:如果你知道n肯定是个正数,而n又被声明成int时,写成(unsigned)n/8是有利于编译器帮你优化的。因为对于一个有符号的数字除以8并不完全等价于右移3位。
实际上,即使除数不是2的整数幂,编译器的优化依然会消除除法,变成一次乘法加一次移位操作。让编译器有优化余地的唯一前提就是,让除数是一个常数,除了直接写除数,也可以用const int来定义。
对于浮点运算,我们有更多的方法减少除法的运算次数(以下方法在特定条件下,使用一些技巧也同样适用于整数运算):
 对于整数除法,如果需要对一个数字反复做除法,则可以先算出其倒数,然后用乘法代替。如果 是常数除法,比如a/3.14倒不必写成a*(1.0/3/14),因为编译器通常会帮你完成这种优化。
 在某些情况下,可以用乘法消除掉除法运算,比如if(a>b/c)可以写成if(a*c>b).编译器之所以 不会帮你做这样的优化,是因为两者并非完全等价(如果c是负数,后者的要写成<;当然这个方法 用于整数的时候,要考虑a*c有溢出的可能)
 我们还可以想办法把多个除法合并起来。对于运算a/b+c/d,(a*d+c*b)/(b*d)会更快一些,这是 因为即使是算3次乘法也快

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值