如何在 linux 和 osx 中设置 python 和 c++ 之间的共享内存

how to set shared memory between python and c++ in linux and osx

我能够在 windows 上共享内存,只需在 cpp 中使用 winapi 并在 python 中使用 mmap.mmap。只需匹配“名称”。

并且我能够在 mac 上使用 <boost/interprocess/shared_memory_object.hpp> 设置共享内存的名称。

但是 python 的 mmap.mmap() 没有用。即使在官方文档中,参数也不同。它没有设置名称的参数。

所以我放弃了,决定使用<sys/ipc.h>

它能够使用密钥与 python 通信,但是 python 中的 write()sysv_ipc 给出以下错误:

ValueError: Attempt to write past end of memory segment

shm = sysv_ipc.SharedMemory(777)
if shm:
    offset = 0
    for idx in range(0, 21):
        shm.write(struct.pack(
            'f', hand_landmarks.landmark[idx].x), offset)
        offset += 4
        shm.write(struct.pack(
            'f', hand_landmarks.landmark[idx].y), offset)
        offset += 4
        shm.write(struct.pack(
            'f', hand_landmarks.landmark[idx].z), offset)
        offset += 4
shmid = shmget(777, 512, IPC_CREAT | 0666)
shared_memory = shmat(shmid, NULL, 0)
fptr = reinterpret_cast<float *>(shared_memory);
for (int i = 0; i < 63; i += 3)
{
    std::cout << fptr[i] << " " << fptr[i + 1] << " " << fptr[i + 2] << "\n";
}

我该怎么办?

问题是 shmget 第二个参数以位为单位,而不是以字节为单位。

所以正确的代码写法是:

shmid = shmget(777, 512 * 8, IPC_CREAT | 0666)