【发布时间】:2012-03-11 19:08:50
【问题描述】:
我想探索在新分配的结构(或类)向量内多次取消引用数据的性能差异。
struct Foo
{
int val;
// some variables
}
std::vector<Foo*> vectorOfFoo;
// Foo objects are new-ed and pushed in vectorOfFoo
for (int i=0; i<N; i++)
{
Foo *f = new Foo;
vectorOfFoo.push_back(f);
}
在我迭代向量的代码部分中,我想通过许多迭代器取消引用来增强引用的局部性,例如我经常执行双嵌套循环
for (vector<Foo*>::iterator iter1 = vectorOfFoo.begin(); iter!=vectorOfFoo.end(); ++iter1)
{
int somevalue = (*iter)->value;
}
很明显,如果vectorOfFoo中的指针很远,我认为引用的局部性有些丢失。
如果在循环之前我对向量进行迭代之前对其进行排序,性能会怎样?我应该在重复取消引用中有更好的表现吗?
我是否确保连续的“new”分配在内存布局中接近的指针?
【问题讨论】:
-
抱歉,还有什么问题?你有简介吗?
-
我想知道在内存布局中使用一个连续的指针数组进行迭代是否更好。
-
指针在内存中必然是连续的,这是由向量保证的。
-
在极少数情况下,排序可能会有所帮助。但是,在这些情况下,您可能会更好地控制数据的实际分配方式。
-
@lineello:“还是没有”?那是替代方案吗?好的,那么我会选择“不”,因为这样一来,世界上所有其他事物都在锅中,包括像针织这样简单得可笑的企业。
标签: c++ performance sorting pointers dereference