我有一个名为GameObject
的基类,其他类派生出来。
我想知道通过在连续内存中分配GameObjects
的所有派生类来处理内存分配是否会提高性能。
我将最终遍历所有游戏引擎框架。
我的问题是,在这种情况下连续的内存存储是否比没有连续的mallocing内存给我更快的迭代次数?在这两种情况下,我都必须保留一个指向游戏对象的指针向量,因为它们的大小会有所不同。
答案 0 :(得分:0)
迭代连续内存中的对象可能会更好,因为缓存和位置。但是,我建议您构建两个系统并实际配置它们。祝你好运!
答案 1 :(得分:0)
我不确定我理解这个问题。您是否更好地将所有对象预先分配到一个巨大的内存块中并将指针存储到内存中的子节点?如果是这样,请不要这样做。
由于系统必须请求较大块的连续内存而不是不连续的较小块,因此您不太可能更快地降低速度。请记住块分配,分页等。您可以请求100兆字节的连续内存,但它实际上不是连续的。一堆它在磁盘中,无论如何一切都被分解成页面。
然后你面临的问题是,您是否一次性分配所有游戏对象以获得连续的内存,或者您是否按需创建它们?你真的想为这一次小优化预分配吗?如果您需要创建一个新对象并且连续的内存块不够大,会发生什么?等
我真的只是在这里集思广益。像其他评论所说的那样是一个过早优化的案例。
现在,如果将所有指针存储在连续数组中而不是基于其当前大小增长和复制的向量,那肯定会更快,但即便如此,除非你绝对知道游戏对象的数量,否则你会更好只需分配一个足够大的矢量,使其只生长一次或两次。