繁体   English   中英

C++ - 连续 memory 和多态性

[英]C++ - contiguous memory and polymorphism

我有一个名为GameObject的基类,其他类从中派生。 我想知道通过在连续的 memory 中分配GameObjects对象的所有派生类来处理 memory 分配是否会提高性能。

我将在每个游戏引擎框架中迭代所有这些。

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

在连续 memory 中迭代对象可能效果更好,因为缓存和位置。 但是,我建议您构建这两个系统并实际分析它们。 祝你好运!

我不确定我是否理解这个问题。 您是在问将所有对象预先分配到 memory 的一个巨大块中并将指向其子部分的指针存储在 memory 中是否更好? 如果是这样,请不要那样做。

因为系统必须请求连续的 memory 更大的块而不是不连续的更小的块,而不是更快,你更有可能放慢速度。 请记住块分配、分页等。您可能会请求 100 兆字节的连续 memory,但它实际上并不连续。 其中一堆在磁盘中,无论如何一切都被分解成页面。

然后你会面临这样的问题:你是将所有游戏对象分配到一个 go 中以获得连续的 memory 还是按需创建它们? 您真的要为这一小优化预分配吗? 如果您需要创建一个新的 object 而您的连续 memory 块不够大,会发生什么情况? 等等

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM