我最近转向使用C++进行游戏编程,虽有在C#中处理内存管理和垃圾回收方面的经验,但在C++方面的经验不多。
过去我听到一些模糊的建议,要在游戏过程中避免分配和释放内存(即使用new
和delete
),并在开始时预先分配所需的所有内容。但这比只在需要时分配和释放游戏对象(敌人、粒子等)更为繁琐和架构复杂。
我认为我读到的建议是针对资源受限平台的 - 我主要是为PC开发,我想会经常变化的游戏状态数据最多只有几兆字节。其余的则是纹理、声音资产等,我将预加载它们。
因此我的问题是:在拥有几千兆字节内存的PC世界中,为了我的游戏状态数据而设置复杂的内存池、预分配等是否值得头疼?或者这只是一种传统的"最佳实践",当最大化有限平台时演变而来,现在被当作信条重复着?
如果我的2MB游戏数据被分散到4MB,我无法想象这对1990年后制造的PC有任何影响 - 但好奇是否有我不知道的东西:)。