首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android共享内存:如何使用ashmem_create_region?

Android共享内存:如何使用ashmem_create_region?
EN

Stack Overflow用户
提问于 2014-04-21 17:25:39
回答 2查看 5.3K关注 0票数 1

我找到了一些在Ansroid中使用共享内存的指南。我已经了解到,由于操作系统或用户强制销毁进程而导致内存泄漏,在Android中不存在shm_open。开发了ASHMEM功能。但是在我的NDK中找不到ashmem_create_region()和其他函数的声明。他们在哪?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-01 14:50:17

就像Android中的很多东西一样,答案是使用JNI。java.nio.MappedByteBuffer类封装了ashmem,并提供了读写方法来访问它。

不幸的是,如果您使用共享内存来提高性能,那么多次往返JNI并不是一个有吸引力的提议。Cedric 提出使用反射按名称检索ashmem句柄,这将工作,但可能在未来的框架中中断。(这确实发生了,BTW。只要有人认为"mFD“太模糊,"mFileDescriptor”就会是个更好的名字,或者诸如此类。)如果您想玩火,我建议按类型而不是名称检索描述符,因为类型不太可能改变。

Cedric还建议在C++中实现Binder,但这使您回到了最初的位置,因为Binder也没有包含在NDK中。相反,您需要通过用Java实现的绑定器服务传递句柄。

我知道,对于这样一个简单的特性来说,这是一项很大的工作。只映射一个文件并使用它就更容易了,这太糟糕了,因为基本的文件映射并不像ashmem那样对移动友好。:-(

票数 3
EN

Stack Overflow用户

发布于 2014-04-28 09:48:19

报头位于aosp的system/core/include/cutils/ashmem.h中。

不能将其用于常规应用程序,因为ashmem函数不是NDK:https://groups.google.com/forum/#!topic/android-ndk/eS9QK8EY968的一部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23202366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档