是否可以在C++中拼接缓冲区,零拷贝?
Is it possible to splice buffers in C++ with zero copy?
假设我有两个缓冲区:
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 中可用。 请参阅什么是"跨度",何时应使用?。
相关文章:
- C++字符*缓冲区的大小
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- Xaudio2在更改缓冲区或循环时弹出声音
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 多线程双缓冲区
- Android P-9.0.0_r53 Logcat主缓冲区超出定义大小
- 套接字读取后,我在缓冲区中看到意外输入
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- std::带有自定义缓冲区的 iostream 不允许我写入
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- OpenGL 16 位模板缓冲区?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 是否可以在C++中拼接缓冲区,零拷贝?
- 浅拷贝到协议缓冲区的字节字段中