我目前正在为游戏引擎编写内存分配系统,我想知道是否有任何经验丰富的开发人员可以帮助提出一些有关分配器结构有用的建议。
我知道这对某些人来说听起来有点担心,所以我想我需要证明一下我的立场。我已阅读了答案here和here(以及他们指向here,here和here的博客。但是看,我已经尝试过“先制作一个游戏,一遍又一遍,然后重复使用的代码就是你的'引擎'”,这对我来说并没有真正起作用。我发现我实际上陷入了我一次又一次地做的事情(可能没有很好地重用我的代码)并且在任何游戏中都没有走得太远。
所以,我决定再一次又一次地重复使用这些东西......再做一次,把它放在一边。
我真的发现自己离开了联盟,所以我买了几本书。 Jason Gregory(GEA)的游戏引擎架构非常好,顺便说一句,但我也有游戏编码完成(McShaffry)和编程游戏AI示例(Buckland)。 GEA对高性能分配器有一些非常好的想法,这真的让我感兴趣,所以我想我会试一试。
我编写了一个基于堆栈的分配器,并且差不多完成了一个基于池的分配器。两者都具有与存储器对齐的能力,并且可以被分配以使用不同的存储器预算(即,任何分配器可以例如使用“零售”存储器或“开发”存储器等)。我发现只是根据我的编程技巧/兴趣水平创建这些组件是一件有益的事情。
我想知道是否有任何开发人员愿意推荐任何其他有用的或在游戏开发中经常出现的分配器结构。 ?或者,是否有任何开发人员在整个职业生涯中从未使用过其他任何东西?
再一次证明我的问题(我几乎可以听到人们在窃窃私语“只做自己的游戏,看看你需要什么样的结构......”,但是......)Game Engine Architecture对我来说是一个非常好的资源,因为作者愿意并毫不羞愧地说“嘿,这就是这个行业最重要的事情”。如果有人可以做一些“体验 - 重用”并说'考虑这个结构',那么它可以节省我很多时间来编写一大堆游戏并找出有用的东西。
答案 0 :(得分:2)
说真的,编写游戏的最大障碍是认为你需要先设计各种花哨的库代码。大多数游戏比任何其他类型的应用程序都需要这种东西。游戏几乎总是处理非常有限数量的数据/对象,这些数据/对象主要由deverlopers决定,并且仅受玩家行为的轻微影响(大型多人游戏是此规则的唯一可能例外),因此您甚至可以通过制作静态如果你有点疯狂,那么所有数据的数组。
除非您正在开发PlayStation或其他具有破坏标准库的控制台垃圾,否则您甚至不应考虑编写自己的分配器。它与游戏开发完全正交,浪费你的时间。这是2011年而不是1992年,您不需要处理具有2-4MB内存的DOS系统,您必须管理自己的数据缓存和丢弃。让虚拟内存系统为您完成工作并花时间制作游戏,而不是操作系统的一半。
答案 1 :(得分:1)
老实说,我最常使用的是Pool<T>
用于短期对象和预先分配的堆作为C ++默认分配器的替代。
但是再一次,在需要时开发你需要的东西。