You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨平台场景下C++与Python通过共享内存实现高速通信的问题咨询

跨C++与Python跨平台共享内存方案

现有报错问题修复

你遇到的FileNotFoundError报错不是multiprocessing.shared_memory不支持跨语言通信,而是Windows平台命名规则不匹配导致:

  • Windows系统下共享内存属于内核对象,普通用户进程创建的共享内存默认归属Local命名空间,名称需要带Local\\前缀
  • Boost.Interprocess创建共享内存时不会自动补充此前缀,Python的multiprocessing.shared_memory模块默认会自动补充,二者命名不匹配导致无法找到对象

修复代码示例

C++端(跨平台适配)

#include <boost/interprocess/shared_memory_object.hpp>
#include <boost/interprocess/mapped_region.hpp>
#include <cstring>
#include <cstdlib>

#ifdef _WIN32
#define SHM_NAME "Local\\myshm"
#else
#define SHM_NAME "myshm"
#endif

int main(int argc, char* argv[])
{
    using namespace boost::interprocess;

    // 启动和退出时清理残留共享内存
    struct shm_remove
    {
        shm_remove() { shared_memory_object::remove(SHM_NAME); }
        ~shm_remove() { shared_memory_object::remove(SHM_NAME); }
    } remover;

    // 创建共享内存,开放所有用户读写权限避免权限不足问题
    shared_memory_object shm(create_only, SHM_NAME, read_write, 0666);

    // 按4K RGB单帧大小设置容量(约24MB,可按需调整)
    shm.truncate(24 * 1024 * 1024);

    // 映射到进程地址空间
    mapped_region region(shm, read_write);

    // 写入测试数据
    std::memset(region.get_address(), 1, region.get_size());

    std::system("pause");
    return 0;
}

Python端

from multiprocessing import shared_memory

if __name__ == "__main__":
    shm_a = shared_memory.SharedMemory(name="myshm", create=False)
    buffer = shm_a.buf
    print(buffer[0])
    # 使用完后关闭
    shm_a.close()

性能对比说明

  1. 纯共享内存方案:完全不涉及磁盘IO同步,读写延迟在微秒级,带宽上限等于内存总线速度,完全可以满足4K 30fps(总带宽约720MB/s)的实时传输需求,是当前场景的最优选择。
  2. mmap方案:只有持久化到物理磁盘的mmap文件会因为磁盘同步产生明显性能损耗,Linux下基于tmpfs的mmap、Windows下基于系统页文件的mmap,性能和纯共享内存几乎没有差异,性能差距在5%以内,可作为备用方案。

额外优化建议

  • 配套使用跨进程信号量做读写同步,避免同时读写出现数据撕裂,Boost.Interprocess和Python multiprocessing模块都自带跨平台信号量实现。
  • 可在共享内存中实现环形队列缓存多帧数据,避免生产消费速度波动导致丢帧。
  • 若带宽仍有冗余,可在C++端做轻量化无损压缩后再写入共享内存,进一步降低内存拷贝开销。

内容的提问来源于stack exchange,提问作者poukill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:54:04