c++ - 游戏引擎的分配器

标签 c++ c memory-management

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

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

所以,我决定对这些我一遍又一遍地重复使用的东西进行编码……只做一次就把它放在一边。

我真的发现自己不合群,所以我买了几本书。 Jason Gregory (GEA) 的 Game Engine Architecture 非常好,顺便说一句,但我也有 Game Coding Complete (McShaffry) 和 Programming Game AI by Example (Buckland)。 GEA 有一些关于高性能分配器的非常好的想法,这让我很感兴趣,所以我想我会试一试。

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

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

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

最佳答案

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

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

关于c++ - 游戏引擎的分配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5819198/

相关文章:

改变指针的值但保留地址

c - 错误 :"pointer being realloc' d 未分配”在 macOS 上,但在 Windows 上尝试重新分配两次时有效

c - 每次返回指针时都必须使用 malloc

c++ - 具有 DirectX 桌面框架的消费者-生产者线程

c++ - "dereferencing"指针是什么意思?

c++ - 如何在 stdin 上强制使用 eof?

c++ - 将逗号格式化为长整型

c - 异步线程的问题(使用 pthread)。抱歉,但更具体的是 body

c - 使用 malloc 探索堆内存

c++ - 删除已声明为新的指针时出错?