gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:01:57 25 4
gpt4 key购买 nike

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

void add_buffer(uint8_t* buffer, size_t buffer_length);

然后我可以使用此函数获取它的 n 个字节:

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

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

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

最佳答案

也许你可以使用 boost::asio::buffer .缓冲区是单个缓冲区。您可以将它们中的几个与 std 容器组合成一个“单个连续”缓冲区,例如 vector <>。您可以使用 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 的分散/聚集场景。

关于c++ - 将不相邻的内存缓冲区视为连续缓冲区的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50084137/

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