将不相邻的内存缓冲区视为连续缓冲区的数据结构

时间:2018-04-29 06:57:04

标签: c++ data-structures

我需要一个数据结构,它接受几个不相邻的缓冲区,而且,作为这个类的用户,我只能看到一个大的连续缓冲区。假设我可以使用这样的API添加任意数量的缓冲区:

void add_buffer(uint8_t* buffer, size_t buffer_length);

然后我可以使用此函数获取n bytes

uint8_t* get_buffer(size_t buffer_size, bool& allocated);

每个缓冲区与其他缓冲区不相邻,但上述函数返回的地址用于连续的内存块。如果请求的缓冲区大小为get_buffer,小于或等于类中的第一个缓冲区,则只返回第一个缓冲区的起始地址,但如果请求的缓冲区分布在多个插入的缓冲区中,则新内存将被分配,并将来自这些缓冲区的数据复制到它,并返回连续的内存地址。

现在我想知道,这个数据结构是否有任何实现,此外,这个结构的名称是什么:)也许如果我知道它的名称,我可以在我的搜索中找到它。

1 个答案:

答案 0 :(得分:1)

也许您可以使用boost::asio::buffer。缓冲区是单个缓冲区。你可以将它们中的几个组合成一个带有std容器的“单个连续”缓冲区,例如:矢量<取代。您可以使用push_back为集合添加缓冲区。

您可以使用

复制缓冲区集合中的内容
vector<const_buffer> buffers = ...;

vector<unsigned char> data(boost::asio::buffer_size(buffers));
boost::asio::buffer_copy(boost::asio::buffer(data), buffers);

顺便说一句,如果你发布一些关于你的问题以及你想做什么的更多信息,你可能会更快地得到更好的答案。您的问题听起来很像网络或磁盘I / O中的分散/收集方案。