几个小std :: vector的连续内存分配?

时间:2015-07-30 15:21:00

标签: c++ arrays vector allocator

我想找到一种方法来存储几个std::vectors,每个allocators,每个都是一个不同但已知且相当小的大小,在连续的内存中。我意识到我可以编写自己的类,比如一个非常大的数组,并指向更大数组中数组的每个子部分的开头,就像一个单独的实体一样,但似乎应该有一个更聪明的方法来做到这一点

有没有办法使用std::vectors来创建连续的std::vectors?我不想重新发明轮子只是因为我希望这个记忆位置正常std::vector

我不知道如何开始编码。我需要创建一个分配器,它接受一个指向内存的指针,在那里分配一个向量,然后以某种方式传回该向量结尾的地址,这样下一个allocator的分配器可以抓住它并且再来一遍。 operator()如何返回值?

2 个答案:

答案 0 :(得分:1)

解决方案是@ HowardHinnant' short_alloc。我想在堆上分配所以必须使用new,***但是否则霍华德发布的代码完全符合我的要求。

template <std::size_t N>
class arena
{...
char* buf_ = new char[N] 
// still need to align this but not sure of the syntax 
// to do that with a new statement
...

当我提出问题时,我的观点中缺少的部分是allocators可以constructors带有参数:

constexpr int N = 1000*sizeof(int);
arena<N> myArena;
std::vector<int, short_alloc<int, N>> x(MyArena);

我在另一个SO帖子中找到了代码引用:Questions about Hinnant's stack allocator,这是Chris Rerew在上面评论中提到的CodeReview帖子中引用的。谢谢大家。

***代码确实在new方法中使用allocate,让我不确定这是否在堆栈上分配(从buf_ *的声明中看出)或者堆(使用new)...

答案 1 :(得分:0)

根据您的要求,我将实现扩展std :: allocator的自定义分配器,并覆盖从内存池中获取块的allocate,deallocate方法。如果您已经知道所需的最大大小,那么选择内存池大小应该不是问题。