*nix から Android へのライブラリの移植に取り組んでおり、ライブラリは共有メモリまたはshm
. Android には System V がありませんshm
。代わりに を使用しますashmem
。
shm
呼び出しをマップする shim ライブラリを知っている人はいashmem
ますか? Google はあまり役に立ちませんでした。
*nix から Android へのライブラリの移植に取り組んでおり、ライブラリは共有メモリまたはshm
. Android には System V がありませんshm
。代わりに を使用しますashmem
。
shm
呼び出しをマップする shim ライブラリを知っている人はいashmem
ますか? Google はあまり役に立ちませんでした。
これは、移植の同様の問題に取り組んでいるときに、私にとってどのように機能したかです。
ファイル記述子の作成と取得に 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 コードに base_address を渡すことができます。
Android には、MemoryFile という名前の Ashmem のラッパー クラスがあります。そちらもご覧いただけます。
次のリンクは、独自のラッパーを作成するのに役立ちました。
これは、Android ashmem (shmget/shmat/shmdt/shmctl 呼び出し) を使用して LD_PRELOAD を実行して Linux 共有メモリをシミュレートできるライブラリです。このライブラリに直接リンクすることもできます。