c++ - std::sort 指针容器

标签 c++ performance sorting pointers dereference

我想探索在新分配的结构(或类) vector 中多次取消引用数据的性能差异。

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);
}

在我迭代 vector 的代码部分,我想通过许多迭代器解除引用来增强引用的局部性,例如,我经常执行双嵌套循环

for (vector<Foo*>::iterator iter1 = vectorOfFoo.begin(); iter!=vectorOfFoo.end(); ++iter1)
{
   int somevalue  = (*iter)->value;

}

显然,如果 vectorOfFoo 中的指针距离很远,我认为引用的局部性会有些丢失。

如果在循环之前我先对 vector 进行排序再对其进行迭代,性能会如何?我是否应该在重复取消引用中获得更好的性能?

我是否确保连续的“new”分配内存布局中接近的指针?

最佳答案

只是回答您的最后一个问题:不,不能保证 new 分配内存的位置。分配可以分布在整个内存中。根据内存的当前碎片,您可能很幸运,它们有时彼此靠近,但不能保证 - 或者实际上可以 - 给出。

关于c++ - std::sort 指针容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9658008/

相关文章:

java - Java 中的集合排序

javascript - AngularJS 自定义排序指令

c++ - 通过 MSHTML 读取 "aria-label"返回 NULL

c++ - 将 vector 数组作为函数参数传递以更改原始值

c++ - 在 C++ 和 C 中共享一个结构?

.net - 单声道对于 Mac OS X 来说足够快吗?

javascript - JavaScript 中的高效粒子系统? (WebGL)

c++ - 究竟什么数据结构是 C++ 中的双端队列?

performance - Kibana旋转了很长时间

c++ - 使用迭代器按谓词重新排列