gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 16:28:32 25 4
gpt4 key购买 nike

我想探索在新分配的结构(或类) 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com