繁体   English   中英

基于ASHMEM的SHM替换

[英]SHM replacement based on ASHMEM

我正在从* nix到Android的库端口上工作,该库使用共享内存或shm Android没有System V shm 相反,它使用ashmem

有谁知道一个垫片库将shm调用映射到ashmem Google并不是很有帮助。

这是一个库,您可以使用Android ashmem(shmget / shmat / shmdt / shmctl调用)LD_PRELOAD来模拟Linux共享内存,也可以直接链接到该库。

https://github.com/pelya/android-shmem

这是我在处理类似移植问题时的工作方式:

与其使用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为Ashmem提供了一个名为MemoryFile的包装器类。 您也可以在其中查看。

以下链接帮助我创建了自己的包装器:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM