【问题标题】:SHM replacement based on ASHMEM基于 ASHMEM 的 SHM 替换
【发布时间】:2013-07-04 19:30:09
【问题描述】:

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

是否有人知道将 shm 调用映射到 ashmem 的 shim 库? Google 帮助不大。

【问题讨论】:

  • 我不得不投第一次近距离投票,因为这显然是题外话......

标签: android unix shared-memory ashmem


【解决方案1】:

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

我没有使用 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);

您可以使用返回描述符的本机函数将基地址从本机代码传递给您的 java 代码。

Android 有一个名为 MemoryFile 的 Ashmem 包装类。你也可以去看看。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 2015-06-22
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      相关资源
      最近更新 更多