gpt4 book ai didi

c++ - 是否可以在 C++ 中以零拷贝方式拼接缓冲区?

转载 作者:行者123 更新时间:2023-12-02 02:33:25 25 4
gpt4 key购买 nike

假设我有两个缓冲区:

uint8_t* buf1[100];
uint8_t* buf2[10];
uint8_t* buf3[90];

其中 buf1 充满了数据,我需要将这些数据的 10 个字节传递给 buf2,其余的传递给 buf3。有没有办法在不复制的情况下做到这一点?

如果没有,是否有一个高级库(如 std::vector),可以在不复制的情况下进行拼接?

最佳答案

不,这是不可能的。这三个缓冲区是具有不同地址的不同对象。因此,某种形式的复制是必要的。

您可以使用 span :

span<uint8_t*, 10> buf2(buf1, 10);
span<uint8_t*, 90> buf3(buf1 + 10, 90);

span 不在 C++17 的标准库中,但在 GSL 中可用。请参阅What is a "span" and when should I use one?

关于c++ - 是否可以在 C++ 中以零拷贝方式拼接缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59223165/

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