QUOTE (den_po @ Sep 21 2015, 17:11)
Вообще heap_5 нужно, если под кучу отводится несколько блоков памяти, располагающихся в разных местах. Если вам такое не нужно, попробуйте heap_4.
Смотреть всю эту муть не хочется, но сама необходимость в чем-то уникально-специальном для того, что-бы использовать несколько отдельных блоков памяти под одним менеджером, вызывает немалое удивление
. В моем добавление любого блока к существующему хипу это целая "супер"
функция:
CODE
void heapadd( heap_t *heap, heap_mcb *xptr, int size )
{
heap_mcb *tptr = heap->freem;
xptr->next = tptr;
xptr->prev = tptr;
xptr->ts.size = size-sizeof(heap_mcb);
xptr->ts.type = MARK_FREE;
xptr->owner = 0;
// Reinit Primary MCB
tptr->next = xptr;
}
heapadd( (heap_t *)&system_heap, (void *)0x7FD00000, 0x2000 );
Так-же в некоторых случаях можно использовать несколько хипов и вообще хипа в выделенном из первичного хипа блоке, например, выделять/удалять в нем блоки одинакового размера - с целью уменьшения дефрагментации основного хипа и увеличения быстродействия.