我正在使用Boost.Asio, 我想通过使用零拷贝发送/接收来改进我的系统。 我可以在 Boost.Asio 中使用 Zero-copy sendmsg/Receive 吗? 如果我可以使用它们,你能告诉我如何使用它们吗?
简短的回答,只有当您的内存表示形式与在线表示形式相同时,您才能这样做。
请参阅此处的答案,这些答案很好地描述了例如Cap'n Proto如何实现这一目标:
- 谷物和提升序列化是否使用零拷贝?
还要比较:
- 使用加速的 TCP 零拷贝
在创建高级C++数据结构的内存可映射表示形式时,以便它们可以在线映射:
-
https://www.boost.org/doc/libs/1_72_0/doc/html/interprocess/managed_memory_segments.html#interprocess.managed_memory_segments.making_ipc_easy.managed_memory_segments_intro,特别是关于
basic_managed_heap_memory
和basic_managed_external_buffer
-
我在这个网站上有无数的例子,展示了如何使用这样的托管内存段,但通常专注于具有完全相同功能集的
managed_mapped_file
和managed_shared_memory
,因此您可以以相同的方式将它们与以前的托管堆段一起使用:https://stackoverflow.com/search?q=user%3A85371+interprocess+allocator