游戏引擎的分配器

Bin*_*ngo 5 c c++ memory-management

我目前正在编写一个游戏引擎的内存分配系统,我想知道是否有任何经验丰富的开发人员可以帮助提出有关分配器结构有用的一些建议.

我知道这对某些人来说听起来有点担心,所以我想我需要证明一下我的立场.我已经在这里这里阅读了答案(以及他们在这里,这里这里指出的博客).但是看,我已经尝试过"先制作一个游戏,一遍又一遍,然后重复使用的代码就是你的'引擎'",这对我来说并没有真正起作用.我发现我实际上陷入了我一次又一次做的事情(可能没有很好地重用我的代码)并且在任何游戏中都没有走得太远.

所以,我决定将这些我再次重复使用的东西编码一次又一次......做一次,把它放在一边.

我真的发现自己离开了联盟,所以我买了几本书.Jason Gregory(GEA)的游戏引擎架构非常好,顺便说一句,但我也有游戏编码完成(McShaffry)和编程游戏AI示例(Buckland).GEA对高性能分配器有一些非常好的想法,这真的让我感兴趣,所以我想我会试一试.

我编写了一个基于堆栈的分配器,几乎完成了一个基于池的分配器.两者都具有内存对齐的能力,并且可以被分配以使用不同的内存预算(即,任何分配器可以例如使用"零售"存储器或"开发"存储器等).我发现只是根据我的编程技巧/兴趣水平创建这些组件是一件有益的事情.

我想知道是否有任何开发人员愿意推荐任何其他有用的或在游戏开发中经常出现的分配器结构.?或者,是否有任何开发人员在其整个职业生涯中从未使用过任何其他东西?

再次证明我的问题是正确的(我几乎可以听到人们在窃窃私语"只做自己的游戏,看看你需要什么样的结构......",但是......)游戏引擎架构对我来说是一个很好的资源,因为作者愿意和毫不掩饰地说"嘿,这是业界最重要的事情".如果有人可以做一些"体验 - 重用"并说"考虑这个结构",那么它可以节省我很多时间来编写一大堆游戏并找出有用的东西.

use*_*016 1

好吧,老实说,我最常使用的是Pool<T>短期对象和预分配堆,作为 C++ 默认分配器的替代品。

但再次强调,在需要时开发您需要的东西

  • 虽然有点晚了,但“当你需要时”开发自定义分配器对于游戏引擎来说可能是一个非常昂贵的提议。直到开发周期接近尾声、寻求性能时,您通常不会“需要它”,到那时,您将必须重构引擎的很大一部分,以最有效地利用它们。如果您正在开发任何具有大量对象的实时游戏,并且正在考虑针对桌面 PC 平台以外的任何平台,那么从长远来看,您几乎肯定会需要它们。 (6认同)