具有多个向量的记忆位置

时间:2016-02-11 08:59:13

标签: c++

我正在实现一个数据结构,X-fast trie,其中需要几个哈希映射。为了存储组成trie的级别搜索结构的地图,我使用了许多std::vector s和一个完美的哈希算法,如下所示:

struct node_value
{
    // One out-edge.
    ...
};

typedef std::array<node_value, 2> node;                             // Two out-edges for each node.
typedef std::array<std::vector<node>, 32> level_search_structure;   // One vector for each level.

在这种情况下,密钥为uint32_t。要使用的向量索引由散列算法确定。

我有点担心记忆的局部性。如果矢量的内容是连续分配的,那么空间局部性会得到改善,或者我相信。我的问题是,实现这一目标的好方法是什么?我正在考虑用C风格的数组包装器替换向量,其内存将由一个单独的对象管理。每个包装器都会从分配的缓冲区中获取一个起始索引和一个长度,如下所示:

std::unique_ptr<node[]> array_ptr(new node[...]);

// In case the first three levels required space for 1, 2, and 4 nodes respectively:
array_wrapper lss_1(array_ptr.get(), 0, 1); // Starts from array_ptr's index 0, capacity of 1 
array_wrapper lss_2(array_ptr.get(), 1, 2); // Starts from index 1, capacity of 2
array_wrapper lss_3(array_ptr.get(), 3, 4); // Starts from index 3, capacity of 4
...

有更好的选择吗?

0 个答案:

没有答案