Странно, почему так происходит? HeapFree работает в 46 раз медленнее чем HeapAlloc. Что очень огорчает. Нельзя ли как-то ускорить его работу? Необходимо выделять быстро много маленьких блоков (20/32 байта) А то больше времени тратится на освобождение памяти, чем на всю работу
Освобождение требует объединение блоков что занимает время. Ну не в 46 раз, раз в 10 точно. Написать свой менеджер. Зависит от задачи, можно динамическим массивом обойтись. Можешь ещё эту тему почитать может что интересного найдёшь, а может и нет. http://www.delphimaster.ru/cgi-bin/forum.pl?id=1323678289&n=3
slesh Как измерялось это замедление? Мерили на отладочной версии или нет? Для аллокаторов малых длин лучше подходит отдельный heap. Тогда не надо HeapFree - просто при удалении всего объекта, где выделено много малых блоков - вызываем HeapDestroy.
void* my_heap[32]; void my_init(){ int i; for(i = 0; i < 32; my_heap[i++] = (void*)0); } void* my_alloc(unsigned size){ unsigned i; unsigned* p; for(i = 5; 1 << i > size + sizeof(MAGIC) + sizeof(void*) + sizeof(unsigned); i++); if(my_heap){ p = my_heap; my_heap = p[1]; }else{ p = (unsigned*)malloc(1 << i); } *p++ = MAGIC; p++; *p++ = i; return (void*)p; } int my_free(void* mem){ unsigned i; unsigned* p = (unsigned*)mem; int rez = -1; p -= 3; __try{ if(*p == MAGIC){ i = p[2]; if(i < 32){ p[1] = my_heap; my_heap = p; rez = 0; } } } __except(){ //.... Err not my_mem ptr } return rez; } должно пойти довольно быстро если не совать в му_фри левую память (проверьте только)