【发布时间】:2014-03-04 10:28:18
【问题描述】:
这是一个简化的例子。请注意,我选择了简单类型,但在应用程序中我可能有更多属性
struct object
{
float a, b;
int c;
};
vector<object> objects;
或
vector<float> a, b;
vector<int> c;
在您至少访问每个属性一次的游戏应用程序中,性能可能会有所不同。无论如何,游戏循环都会贯穿整个索引。
我知道第一个示例更方便(使用单个结构组织代码要容易得多)并且它可能取决于应用程序的实际操作,但第二个示例不是对缓存更友好吗?
我知道一开始使用 Knuth 过早优化的东西不是制作应用程序的正确方法,但我想知道...我在 gamedev 幻灯片中读过一次,我想知道是否是真是假,为什么。
【问题讨论】:
-
我认为确定您的具体情况的唯一方法是针对您的具体情况进行测试。
-
第二个在只访问每个对象的一个(或多个)成员的循环中对缓存更友好。如果“您至少访问每个属性一次”,那么第一个可能更有效,也更方便。
标签: c++ arrays performance