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