Я не уверен, что вы после.Часто используемая техника для обработки выделения и освобождения памяти в C заключается в реализации структуры данных трассировки памяти , которая содержит несколько указателей на память, которая была выделена с использованием вашей собственной реализации malloc, calloc, realloc
, например mymalloc, mycalloc, myrealloc
(вызывая сами оригинальные функции), а затем используя новую функцию free_memtrace
, чтобы освободить всю память, записанную в трассировке, за один вызов функции.
Так, например, вы можете сделать
MEMTRACE mt; // Possibly a module-scoped global variable
begin_memtrace( &mt );
ptr1 = mymalloc( size );
ptr2 = mycalloc( n, sizeof(type) );
end_memtrace( &mt );
, а затем в какой-то момент в вашей программе
free_memtrace( &mt );
очистить память, записанную в mt
.
Функции begin_memtrace, end_memtrace
необходимы для того, чтобы ваши функции выделения «знали», куда записывать указатели.Эта информация может храниться локально в модуле, где вы реализуете mymalloc, mycalloc, myfree, free_memtrace ...
.