【发布时间】:2014-05-07 08:58:09
【问题描述】:
在这种情况下,问题场景是一个游戏,所以所有资源都在开始时分配,然后迭代一个级别。
存储在向量中的对象是复杂类的实例,当然,在加载时将它们实际复制到向量中是耗时的,但关注度较低。
但如果我主要关心的是在运行时对类对象的迭代速度,我会更好地将类对象本身存储在向量中,而不是像传统建议的那样仅指向类对象的指针吗?
在这个例子中我不关心内存管理,只关心迭代速度。
【问题讨论】:
-
如果您谈论的是已构建的向量,性能差异将是微不足道的,但 可能 有利于对象向量,因为消除了一个间接级别.和往常一样,同时介绍两者并亲自查看。
-
但是,在对象向量场景中,连续的数据难道不会固有地加快迭代速度吗?
-
它们都是同一类型吗?如果不是,那么您必须使用指针来避免切片。
-
@metamorphosis 除其他原因外,是的。但很可能你的“对象”也有它自己的动态成员(大多数都有;字符串、其他向量等)。如果它是真正的 POD 类型并且足够小以在数据缓存中有很好的负载,那么毫无疑问,对象向量会表现得更好,再次假设我们正在谈论一个已经构建的向量。但就像我说的,profile 它。
-
另请注意,如果这是一个问题,可以通过为向量提供自定义分配器来使指针数组更加缓存友好,以便从连续内存的内存池中分配对象。
标签: c++ class object vector iteration