我要寻找一个库/解决方案,将缓解高速缓存未命中的,而重要的数字,我在我的程序经历C++:矢量和缓存的区域性矢量
class Foo{
std::vector<Foo*> myVec;
// Rest of the class
};
int main(){
// Some code
std::vector<Foo*> myVecOfFoo;
}
所以,我做的第一件事就是创建一个std::vector<Foo>
和每个单一的Foo*
指向这个向量。它帮助了很多。 我的主要问题是与std::vector<Foo*> myVec;
。这些向量的每个内部数组都位于内存的不同部分。与我创建单个std::vector<Foo>
的方式相同,以便我的所有Foo
在内存中都是连续的,我希望所有的std::vector<Foo*> myVec;
都在内存中对齐(实际上是内部阵列)。怎么样?
备注:重要的一点是,myVec
的大小因Foo
的实例而异。否则,我可以简单地构建一个std::vector<Foo*>
并编写getter/setter。此外,我有std::shared_ptr<Foo>
而不是Foo*
,因为我不是一个野蛮人,但它使得对示例的理解更容易。最后,我保证所有权形成DAG,所以我没有共享指针中的循环。
嗯,获取连续内存可能很难与变量大小。如果它很重要,我可能会查看竞技场分配情况。 – mascoj
我能想到的一件事就是使用一个自定义分配器,将所有数据一起存储在内存中。这样做虽然限制了你可以拥有多少'Foo'。 – NathanOliver
看看boost的[small_vector](http://www.boost.org/doc/libs/1_60_0/doc/html/boost/container/small_vector.html) – sp2danny