Вставлю свои пять копеек.
Я организовывал в программах, которые много работали с выделением-освобождением памяти следующее:
Вся динамическая память - двусвязный список. То есть каждый элемент имеет указатель на последующий и предыдущий элементы. В начальный момент времени весь список состоит из одного элемента, указывающего на самого себя.
При выделении памяти - число элементов списка увеличивается. При освобождении - уменьшается, причем соседние свободные элементы объединяются в один.
Для списка хранится указатель на его голову и текущий элемент (последний выделенный участок памяти).
Таким образом при использовании free(void* ptr) экономится время, поскольку просматривается не весь список, а только элементы, соседние с удаляемым.
Каждое пользовательское приложение имеет список выделенных ему участков памяти. При удалении приложения эти участки принудительно освобождаются. Таким образом, после удаления приложения никакого "мусора" в памяти просто не остается.
ИмХО, такой подход более расточителен по памяти, зато много головных болей устраняет.




Ответить с цитированием