面向数据编程

本文探讨面向数据编程在游戏编程中的应用,强调减少面向对象的抽象以提高效率。内容涉及冷数据/热数据分割,建议将频繁调用的函数避免使用虚函数,以及重新审视C++ STL容器的选择,提醒开发者不应过度依赖时间复杂度,而应关注实际性能。最后,总结认为在游戏编程中,面向数据和面向对象应结合使用。
摘要由CSDN通过智能技术生成

面向对象编程层层抽象造成臃肿,导致运行效率降低,而这是性能要求高的游戏编程领域不想看到的。

面向过程:建立解决问题所需的各个步骤(函数)。
面向对象:建立解决问题所需的各个模型(类)。
面向数据:考虑数据的存取及布局(数据)。
值得一说的是,面向过程面向对象都是解决问题的一种方法,而面向数据只是一种优化的设计思想,而非解决问题的方法。

冷数据/热数据分割

我们希望CPU缓存存储的是经常使用的数据,而不是那些少用的数据。这就引入了冷数据/热数据分割的概念了。

热数据:经常要操作使用的数据,我们一般可以直接作为可直接访问的成员变量。

冷数据:比较少用的数据,我们一般以引用/指针来间接访问(即存储的是指针或者引用)。

一个例子:对于人类来说,生命值位置速度都是经常需要操作的变量,是热数据。
而掉落物对象只有人类死亡的时候才需要用到,所以是冷数据;

频繁调用的函数尽可能不要做成虚函数

C++的虚函数机制,简单来说是两次地址跳转的函数调用,这对CPU缓存十分不友好,往往命中失败。实

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值