Как устроена куча Blackfin |
Добавил(а) microsin | ||||||||||||||||||||||||
Обычно пользователю библиотек Analog Devices для работы с кучами достаточно использовать только функции heap_malloc, heap_space_unused, heap_free [1]. Но иногда при поиске причин проблем требуется заглянуть глубже. Здесь приведено описание библиотеки для обслуживания куч процессоров Blackfin от компании Analog Devices.
heap_table. Это массив ячеек, каждая из которых содержит три беззнаковых 32-битных числа: базовый адрес кучи, длина кучи и идентификатор кучи: unsigned long base; unsigned long length; unsigned long id; heapdata. Структура heapdata позволяет создавать связанные списки блоков памяти, выделенных в куче. typedef struct t_heapdata { char *base; // Начало кучи в адресном пространстве. size_t length; // Размер кучи unsigned long userid; // Идентификатор (индекс) кучи. Куча с индексом 0 // является кучей по умолчанию, еще она называется // системной кучей, и она обычно находится в L1 (SRAM). // Куча с индексом 1, если она определена, обычно // находится в L3 (SDRAM). char *current; // Текущая (последняя выделенная) область памяти в куче. struct t_heapdata *next_heap; //Ссылка на следующую кучу в таблице. #ifdef _FAST_MULTI_HEAPS _Altab _Aldata; // Информация управления кучей. #endif
} heapdata;
_Altab. Структура, где хранятся данные, необходимые для обслуживания кучи. typedef struct { /* Информация управления кучей */ _Cell **_Plast; /* == null, или указывает на место, откуда продолжится сканирование malloc */ _Cell *_Head; /* == null, или указывает на свободную ячейку с самым малым адресом */
} _Altab;
[Ссылки] 1. VisualDSP: работа с динамически выделяемой памятью. |