从这篇文章中,它说android有不同的内存分配(例如pmem,cmem ..),并将切换到离子。
http://lwn.net/Articles/480055/
我一直在看android框架代码,我认为框架内存分配是通过MemoryHeapBase类完成的: http://androidxref.com/4.4.2_r1/xref/frameworks/native/libs/binder/MemoryHeapBase.cpp#43
但是从那个类中,我看不出它是如何使用差异内存分配方案分配内存的。
我只看到它创建了一个共享区域:
int fd = ashmem_create_region(name == NULL ? "MemoryHeapBase" : name, size);
ALOGE_IF(fd<0, "error creating ashmem region: %s", strerror(errno));
你能告诉我在框架中使用pmem实际分配内存的位置吗? CMEM?还是离子?
谢谢。
答案 0 :(得分:0)
ashmem用于通过传递文件描述符来共享内存b / w进程。
首先,您将创建ashmem regoin,然后您将在进程空间中使用该fd进行mmap。
如果此进程想要共享mmaped文件,那么它只会通过binder将fd传递给另一个进程。
答案 1 :(得分:0)
据我所知,MemoryHeapBase,IMemoryHeap和IMemory与Binder RPC中共享内存操作的ashmem模型有关。
内存分配由HAL层中的ION完成。然后将fd传递给MemoryHeapBase进行共享。
PS: 你可以参考android / hardware / vendor / camera / ... code