C++ 游戏引擎的分配器

C++ 游戏引擎的分配器,c++,c,memory-management,C++,C,Memory Management,我目前正在为一个游戏引擎编写一个内存分配系统,我想知道是否有经验丰富的开发人员可以提供一些关于分配器结构有用的建议 我知道对一些人来说这听起来有点令人担忧,所以我认为我需要稍微证明我的立场。我已经阅读了答案和(以及他们指向的博客和)。但是你看,我试过“先做一个游戏,一次又一次,然后你重用的代码就是你的‘引擎’”,但这对我来说并不奏效。我发现我实际上陷入了那些我一次又一次在做的事情中(可能没有很好地重用我的代码),并且在任何游戏中都没有走得很远 所以,我决定将这些我一遍又一遍重复使用的东西编码。。

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

我知道对一些人来说这听起来有点令人担忧,所以我认为我需要稍微证明我的立场。我已经阅读了答案和(以及他们指向的博客和)。但是你看,我试过“先做一个游戏,一次又一次,然后你重用的代码就是你的‘引擎’”,但这对我来说并不奏效。我发现我实际上陷入了那些我一次又一次在做的事情中(可能没有很好地重用我的代码),并且在任何游戏中都没有走得很远

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

我真的发现自己和别人格格不入,所以我买了几本书。顺便说一句,Jason Gregory(GEA)的游戏引擎架构非常好,但我也有完整的游戏编码(McShaffry)和通过示例编程游戏AI(Buckland)。GEA对高性能分配器有一些非常好的想法,这让我非常感兴趣,所以我想试试

我已经编写了一个基于堆栈的分配器,并且几乎完成了一个基于池的分配器。两者都具有内存对齐的能力,并且可以分配使用不同的内存预算(例如,任何分配器都可以使用“零售”内存或“开发”内存等)。就我的编程技能/兴趣水平而言,我发现创建这些组件是一件非常有意义的事情

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


再次证明我的问题是正确的(我几乎可以听到人们低声说“制作你自己的游戏,看看你需要什么结构…”,但是…)游戏引擎架构对我来说是一个非常好的资源,因为作者愿意并且毫不羞愧地说“嘿,这是这个行业最主要的功能”。如果有人能做一些“经验重用”并说“考虑一下这个结构”,那我就可以节省大量时间编写一大堆游戏并找出有用的东西了。

老实说,我使用最多的是池> <代码>,用于短寿命对象和预先分配的堆作为C++默认分配器的替代。
但是再一次,在需要的时候开发你需要的东西。

说真的,编写游戏的最大障碍是认为你需要先设计各种各样的库代码。大多数游戏对这种东西的需求比任何其他类型的应用程序都少。游戏几乎总是处理数量非常有限的数据/对象,这些数据/对象主要由开发者决定,并且只受到玩家行为的轻微影响(大型多人游戏是该规则唯一可能的例外),因此,如果你有点疯狂,甚至可以通过为所有数据制作静态数组来获得


除非您正在为PlayStation或其他带有坏标准库的控制台垃圾进行开发,否则您甚至不应该考虑编写自己的分配器。这与游戏开发完全正交,浪费了你的时间。这是2011年,而不是1992年,而且您不会处理具有2-4MB ram的DOS系统,您必须管理自己的数据缓存和丢弃。让虚拟内存系统为您完成工作,花时间制作游戏,而不是操作系统的一半。

+100如果可以的话。编写成吨的可重用代码/引擎非常棒(我的引擎从2002年就开始出现了)但是有很多事情比编写自己的内存分配器更重要……除非你从1992年开始开发一些使用2-4MB内存的街机游戏,否则这个答案完全是错误的-base@MartinKällman:你愿意详细解释一下你为什么会这样想吗?这次聚会有点晚了,但是“在你需要的时候”开发自定义分配器对于游戏引擎来说,这可能是一个非常昂贵的提议。通常情况下,在开发周期接近尾声时,当您正在寻找性能时,您不会“需要它”,到那时,您将不得不重构引擎的很大一部分,以最有效地利用它们。如果你正在开发任何具有大量对象的实时游戏,并且正在考虑瞄准台式PC平台以外的任何其他平台,那么从长远来看,你几乎肯定需要它们。