我使用 JNI 访问之前创建的共享内存段。我使用 Java/Jni 读/写函数,它可以获取共享缓冲区的地址,也可以获取映射区域的 id。
不幸的是,似乎每次我调用读/写函数时,我都必须使用下面的函数重新映射段。有没有办法解决这个问题?我想(我已经尝试过了,但它没有用,只需要映射一次段,并且将来只需使用 void* addr 参数,而不是每次我调用 JNI 方法读取或写入, 必须调用 map_shared_memory。当前代码运行良好,但仍然相对较慢。因此希望尽量减少看似不必要的操作。
void* map_shared_memory(int id) {
void* addr;
if (id == 0)
return NULL;
addr = shmat(id, NULL, 0);
shmctl(id, IPC_RMID, NULL);
if(addr<=0)
perror("Error Mapping Shared Memory: ");
return addr;
}