是否可以在C++中拼接缓冲区,零拷贝?

Is it possible to splice buffers in C++ with zero copy?

本文关键字:缓冲区 拷贝 拼接 C++ 是否      更新时间:2023-10-16

假设我有两个缓冲区:

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);

截至 C++17 日,span不在标准库中,但在 GSL 中可用。 请参阅什么是"跨度",何时应使用?。