本文主要是介绍Android匿名共享内存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ashmem的使用流程如下:
1.ashmem_create_region创建匿名共享内存区域,本质是调用open系统调用
2.ioctl设置共享内存的名字和大小,设置的名字为/dev/ashmem/,名字的存在就为了能够让其他人找到目标
3.mmap映射文件中的虚拟内存以及物理内存
4.直接对着这一块地址区域读写。
其中ioctl必须设置名字和大小,不然没办法进行映射,因为在映射之前进行了校验。
那么ashmem和Binder有什么区别呢?
Binder的mmap时候已经通过伙伴系统绑定了物理页和虚拟内存之间的联系,而Ashmem则是通过缺页中断,调用相关的函数才进行绑定。换句话说Ashmem是按需加载,而Binder则是一开始就通过mmap就分配好。
Ashmem就是打通一块大的内存通道方便进程之间通信大数据。而Binder更加倾向小规模的指令,并且这种指令有明确的方向和顺序,保证每一个指令的可靠性。Binder为了保证每一个指令的可靠做了极其复杂的数据结构进行管理。
这篇关于Android匿名共享内存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!