2014-01-16 24 views
3

从这篇文章中,它表示android有不同的内存分配(例如,pmem,cmem ..)并将切换到ion。需要帮助了解android内存分配器

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

作为我的理解,Google地图Android版CMEM,可用内存请求的过程中PMEM ashmem地区,并连接一个文件描述符用映射区域来访问内存。见[this](http://androidxref.com/4.1.2/xref/system/core/libcutils/ashmem-dev.c#42) – nmxprime

回答

0

ashmem仅用于通过传递文件描述符来共享内存b/w进程。

首先,您将创建ashmem regoin,然后您将使用该fd在进程空间中进行mmap。

如果这个过程想要共享mmaped文件,那么它只会通过活页夹将fd传递给另一个进程。

0

据我所知,MemoryHeapBase,IMemoryHeap和IMemory与Binder RPC中共享内存操作的ashmem模型有关。

内存分配是由ION在HAL层完成的。然后将fd传递给MemoryHeapBase进行共享。

PS: 你可以参考到Android /硬件/供应商/摄像头/ ...代码