首页 文章

C - 连续记忆和多态性

提问于
浏览
1

我有一个名为 GameObject 的基类,其他类派生自该类 . 我想知道如果通过在连续内存中分配 GameObjects 的所有派生类来处理内存分配将提高性能 .

我将最终在每个游戏引擎框架上迭代它们 .

我的问题是,在这种情况下连续的内存存储是否比没有连续的mallocing内存给我更快的迭代次数?在这两种情况下,我都必须保留一个指向游戏对象的指针向量,因为它们的大小会有所不同 .

2 回答

  • 0

    迭代连续内存中的对象可能更好,因为缓存和位置 . 但是,我建议您构建两个系统并实际配置它们 . 祝好运!

  • 0

    我不确定我理解这个问题 . 您是否更好地将所有对象预先分配到一个巨大的内存块中并将指针存储到内存中的子节点?如果是这样,请不要这样做 .

    由于系统必须请求较大块的连续内存而不是不连续的较小块,因此您不太可能更快地降低速度 . 请记住块分配,分页等 . 您可以请求100兆字节的连续内存,但它实际上不是连续的 . 一堆它在磁盘中,无论如何一切都被分解成页面 .

    然后你面临的问题是,你是否一次性分配所有的游戏对象以获得连续的内存,或者你是否按需创建它们?你真的想为这一次小优化预分配吗?如果您需要创建一个新对象并且连续的内存块不够大,会发生什么?等等

    真的,我只是在这里集思广益 . 像其他评论所说的那样是一个过早优化的案例 .

    现在,如果将所有指针存储在一个连续的数组中而不是基于其当前大小增长和复制的向量,那肯定会更快,但即便如此,除非你绝对知道游戏对象的数量,否则你最好只分配一个足够大的矢量,使它只生长一次或两次 .

相关问题