gpt4 book ai didi

c++ - 几个小 std::vectors 的连续内存分配?

转载 作者:可可西里 更新时间:2023-11-01 17:59:17 26 4
gpt4 key购买 nike

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

有没有办法使用分配器,例如,创建连续的std::vectors?我不想重新发明轮子只是因为我想要这个正常的 std::vectors

的内存位置

我什至不知道如何开始编码。我需要创建一个分配器,它接受一个指向内存的指针,在那里分配一个 vector ,然后以某种方式传回该 vector 末尾的地址,因此下一个 std::vector 的分配器可以捕获它,然后再做一次。 分配器如何返回值?

最佳答案

解决方案是@HowardHinnant 的 short_alloc .我想在堆上分配,所以必须使用 new,*** 但除此之外,Howard 发布的代码完全符合我的要求。

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 Drew 在他上面的评论中建议的 CodeReview 帖子中引用的。谢谢大家。

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

关于c++ - 几个小 std::vectors 的连续内存分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31727791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com