优化动态大小矢量矢量的存储

时间:2015-02-05 06:19:12

标签: c++ caching vector

在我正在做的一些工作中,我多次遇到过这个问题模式,我想知道是否存在已知的解决方案。

这很简单:我有一个元素向量,它们又是一些动态大小的向量。我知道内部向量的大小将相对较小(即,在平均情况下大约为10s的项目),但会有很多。

我可以天真地解决这个问题:

vector<vector<item>> vss;

使用这种方法,内部向量中的内存分配将遍布整个地方。迭代vss中的所有元素将是一个混乱的缓存,这可能会导致我的性能问题。

我认为这可以通过使用某种链接列表结构来解决,该列表结构在同一块内存中具有多个头。

假设无法预先确定内部向量的大小,是否有办法构造和填充vss,以便迭代元素不会成为缓存灾难?

谢谢。

1 个答案:

答案 0 :(得分:0)

我只想添加我当前的,但希望是暂时的解决方案。我没有直接填充vss,而是使用临时的矢量对象:

vector<pair<size_t, item>> temporaries;

,表示应在特定索引处插入某个项目。从这里我计算每个索引的条目数,分配一个内存块来保存项目,并移动数据。一些额外的向量用于记账(即每个索引的项目数量及其起始位置)。