我正在使用从* nix到Android的库端口,该库使用共享内存或shm
。 Android没有System V shm
。相反,它使用ashmem
。
是否有人知道要将shm
来电映射到ashmem
的填充程序库?谷歌并没有太大的帮助。
答案 0 :(得分:3)
这是一个库,您可以使用Android ashmem(shmget / shmat / shmdt / shmctl调用)LD_PRELOAD来模拟Linux共享内存,您也可以直接链接到这个库。
答案 1 :(得分:2)
在处理类似的移植问题时,这就是我的工作方式:
不是使用shmfd = open(SHM_PATH,O_RDWR)来创建和获取文件描述符,而是将其替换为
int fd = ashmem_create_region("SharedRegionName", size);
并使用文件描述符获取基址:
int base_address = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
您可以使用返回描述符的本机函数将base_address从本机代码传递给您的java代码。
Android有一个名为MemoryFile的Ashmem的包装类。你也可以看一下。
以下链接帮助我创建了自己的包装器: