需要帮助来理解android内存分配器

时间:2014-01-16 22:30:35

标签: android memory-management

从这篇文章中,它说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?还是离子?

谢谢。

2 个答案:

答案 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