我想找到一种方法来存储几个std::vectors
,每个allocators
,每个都是一个不同但已知且相当小的大小,在连续的内存中。我意识到我可以编写自己的类,比如一个非常大的数组,并指向更大数组中数组的每个子部分的开头,就像一个单独的实体一样,但似乎应该有一个更聪明的方法来做到这一点
有没有办法使用std::vectors
来创建连续的std::vectors
?我不想重新发明轮子只是因为我希望这个记忆位置正常std::vector
我不知道如何开始编码。我需要创建一个分配器,它接受一个指向内存的指针,在那里分配一个向量,然后以某种方式传回该向量结尾的地址,这样下一个allocator
的分配器可以抓住它并且再来一遍。 operator()
如何返回值?
答案 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方法。如果您已经知道所需的最大大小,那么选择内存池大小应该不是问题。