C++ - 连续记忆和多态性
C++ - contiguous memory and polymorphism
我有一个名为GameObject
的基类,其他类也从中派生出来。我想知道通过在连续内存中分配所有派生的GameObjects
类来处理内存分配是否会提高性能。
我最终将遍历每个游戏引擎帧的所有帧。
我的问题是,在这种情况下,连续内存存储是否比不连续的错位内存给我更快的迭代时间?在这两种情况下,我都必须保留指向游戏对象的指针向量,因为它们的大小会有所不同。
循环访问连续内存中的对象可能效果更好,因为缓存和局部性。但是,我建议您构建这两个系统并实际分析它们。祝你好运!
我不确定我是否理解这个问题。您是否在问将所有对象预先分配到一个巨大的内存块中并将指向该子部分的指针存储在内存中是否更好? 如果是这样,请不要这样做。
而不是更快,你更有可能减慢速度,因为系统必须请求较大块的连续内存,而不是较小块的非连续内存。 请记住块分配、分页等。 您可以请求 100 MB 的连续内存,但它实际上不是连续的。其中一堆在磁盘中,无论如何,所有内容都分解成页面。
然后,您面临的问题是,您是一次性分配所有游戏对象以获得连续内存,还是按需创建它们?您真的要为这一次小优化预先分配吗? 如果需要创建新对象并且连续内存块不够大,会发生什么情况?等。
真的,我只是在这里集思广益潜在的问题。就像其他评论所说的那样,这是一个过早优化的情况。
现在,如果您将所有指针存储在一个连续的数组中,而不是根据其当前大小增长和复制的向量,它肯定会更快,但即便如此,除非您绝对知道游戏对象的数量,否则您最好分配一个足够大的向量,以便它只增长一两次。
相关文章:
- 多态性和功能结合
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- C++boost序列化多态性问题
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 如何在多线程中正确使用unique_ptr进行多态性?
- 具有智能指针的多态性
- 在 C++ 中在堆栈上创建实例时如何保持多态性?
- 继承/多态性 - 我是否被迫使用"protected"变量?
- C++ 多态性在代码::块 17.12 中不起作用
- C++ 泛型和多态性:这种模式可行吗?
- 为什么我们实际上需要运行时多态性?
- 如何在这个简单的最小示例中实现多态性?
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- 无法初始化已知大小的矢量指针,该大小不会因多态性而更改
- 运行时多态性和dynamic_cast需要澄清
- 如何调用指针类型的方法(禁用多态性)?
- 从基类调用函数的多态性
- 运行时多态性 - 箭头运算符访问了错误的成员?
- C++ - 连续记忆和多态性