我正在开发一款需要高性能的视频游戏,所以我正在尝试设置一个好的内存策略或游戏的特定部分,即游戏“模型”的部分,游戏表示。
我有一个包含整个游戏表示的对象,里面有不同的管理器,以保持表示一致,遵循游戏规则。每个游戏实体当前都是由特定类型的工厂生成的,所以我有几个工厂可以让我根据需要隔离和更改这些实体的内存管理。
现在,我正在这两种选择之间进行选择:
- 每种类型都有一个内存池:这将允许真正快速的分配/释放和最小的碎片,因为对象池已经知道分配对象的大小。困扰我的一件事是有几个这样的独立池,也许会使其他解决方案更有效......
- 让一个游戏表示的所有工厂共享一个大内存池:(使用带有一些适配器功能的 boost::pool 之类的东西)这样我就可以将所有游戏对象内存分配在一起,并且可以为一个游戏分配一个位我已经知道总大小(并非总是如此)。我不确定它是否比 A 更好,因为池内可能存在碎片,因为在同一个池中会有不同大小的对象,但对于内存分析和其他问题修复来说,它看起来更容易。
现在,我在 A 方面有一些现实世界的经验,所以我对 B 没有经验,并且想就这些解决方案获得一些建议,用于长期项目。哪种解决方案似乎更适合长期项目,为什么?(注意:在这种情况下确实需要一个池,因为游戏模型也用于游戏编辑,因此会有很多小对象的分配/释放)。
为澄清而编辑:我正在使用 C++ if(尚不清楚)