2014-01-16 23 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 /硬件/供應商/攝像頭/ ...代碼