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

sun*_*nny 8 c++ arrays vector allocator

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

有没有办法使用allocators,例如,创建连续std::vectors?我不想重新发明轮子只是因为我希望这种记忆局部性正常std::vectors

我不知道如何开始编码.我需要创建一个分配器,它接受一个指向内存的指针,在那里分配一个向量,然后以某种方式传回该向量结尾的地址,这样下一个std::vector分配器就可以抓住它并再次执行它.如何allocator返回一个值?

sun*_*nny 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
...
Run Code Online (Sandbox Code Playgroud)

当我问这个问题时,从我的角度来看,缺少的部分是allocators可以constructors接受参数:

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

我在另一篇 SO 帖子中找到了代码参考:关于 Hinnant 堆栈分配器的问题,这是从 Chris Drew 在上面的评论中建议的 CodeReview 帖子中引用的。谢谢你们。

***new该代码确实在方法中使用allocate,让我不确定它是在堆栈上分配(如 buf_* 的声明所示)还是在堆上分配(使用new)...