Android ndk Android NDK共享内存:如何使用ashmem_创建_区域?

Android ndk Android NDK共享内存:如何使用ashmem_创建_区域?,android-ndk,shared-memory,Android Ndk,Shared Memory,我找到了一些在Ansroid操作系统中使用共享内存的指南。我了解到,由于操作系统或用户强制终止进程导致内存泄漏,安卓amymore中不存在shm_open。 相反,开发了ASHMEM函数。但我在NDK中找不到ashmem_create_region和其他函数的声明。它们在哪里?标题位于aosp的system/core/include/cutils/ashmem.h内部 不能将其用于常规应用程序,因为ashmem函数不属于NDK的一部分: 标题位于aosp的system/core/include/

我找到了一些在Ansroid操作系统中使用共享内存的指南。我了解到,由于操作系统或用户强制终止进程导致内存泄漏,安卓amymore中不存在shm_open。
相反,开发了ASHMEM函数。但我在NDK中找不到ashmem_create_region和其他函数的声明。它们在哪里?

标题位于aosp的system/core/include/cutils/ashmem.h内部

不能将其用于常规应用程序,因为ashmem函数不属于NDK的一部分:
标题位于aosp的system/core/include/cutils/ashmem.h内部

不能将其用于常规应用程序,因为ashmem函数不属于NDK的一部分:

与Android中的许多东西一样,答案是使用JNI。Java类Java.nio.MappedByteBuffer包装ashmem并提供读/写方法来访问它

不幸的是,如果您使用共享内存来提高性能,那么通过JNI进行多次往返并不是一个有吸引力的建议。Cedric Fung使用反射按名称检索ashmem句柄,这将起作用,但在未来的框架中可能会中断。顺便说一句,这种情况确实发生了。所需要的只是有人认为mFD太模糊,mFileDescriptor会是一个更好的名称,或者类似的名称。如果您想使用fire,我建议按类型而不是按名称检索描述符,因为类型不太可能更改

塞德里克还建议在C++中实现绑定器,但这会使您返回到您所处的位置,因为NDK中还没有包含BooD。相反,您需要通过Java实现的绑定服务传递句柄


我知道,这么简单的功能需要做很多工作。只需映射一个文件并使用它就更容易了,这太糟糕了,因为基本的文件映射远不如ashmem对移动设备友好-

与Android中的许多东西一样,答案是使用JNI。Java类Java.nio.MappedByteBuffer包装ashmem并提供读/写方法来访问它

不幸的是,如果您使用共享内存来提高性能,那么通过JNI进行多次往返并不是一个有吸引力的建议。Cedric Fung使用反射按名称检索ashmem句柄,这将起作用,但在未来的框架中可能会中断。顺便说一句,这种情况确实发生了。所需要的只是有人认为mFD太模糊,mFileDescriptor会是一个更好的名称,或者类似的名称。如果您想使用fire,我建议按类型而不是按名称检索描述符,因为类型不太可能更改

塞德里克还建议在C++中实现绑定器,但这会使您返回到您所处的位置,因为NDK中还没有包含BooD。相反,您需要通过Java实现的绑定服务传递句柄


我知道,这么简单的功能需要做很多工作。只需映射一个文件并使用它就更容易了,这太糟糕了,因为基本的文件映射远不如ashmem对移动设备友好-

嗯。我明白了。但是有没有办法将共享内存用作RPC呢?好的。我明白了。但是有没有办法将共享内存用作RPC呢?