2014-01-16 3 views
3

Из этой статьи он сказал, что у android есть разное распределение памяти (например, pmem, cmem ..) и будет переключено на ион.Нужна помощь в понимании распределителя памяти Android

http://lwn.net/Articles/480055/

И я смотрел на андроид рамочным кода, я думаю, что распределение структуры памяти осуществляется через 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

По моему разумению, андроид карты 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 относятся к модели ashmem для операций с общей памятью в Binder RPC.

Распределение памяти выполняется ION в слое HAL. Затем fd передается в MemoryHeapBase для общего доступа.

Ps: Вы можете обратиться к Android/аппаратное обеспечение/поставщик/камер/... Код

Смежные вопросы