c++ - 是否可以在 C++ 中使用零拷贝拼接缓冲区?
问题描述
假设我有两个缓冲区:
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 中可用。请参阅什么是“跨度”以及何时应该使用“跨度”?.
推荐阅读
- cypress - 赛普拉斯:插件文件丢失或无效
- php - WooCommerce:预订:尝试更新产品中定价选项卡的 dB
- c++ - 标识符“numIDs”在范围内未定义
- javascript - youtube iframe api player.playVideo() 不起作用
- python - 使用 MDDataTable 单击时的 Kivy 行数据
- angular - NgRx 存储 - 类型错误:无法冻结
- python - Scrapy 动态 Feed 导出
- google-bigquery - BigQuery:获取窗口中的第一个非空值?
- javascript - 由于我不知道我的 v-models,我如何提交动态表单
- rust - 发送 &str 数字作为输入未通过条件检查,而硬编码相同的 &str 数字则不会 (RUST)