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