Пригодилось мне уже в одном проекте, и я подумал, что будет неплохо поделиться.
Возможности:
- Учёт статистики, а именно структура данных с пятью полями - количество байт при последнем выделении памяти; количество выделенных байт на текущий момент времени; максимальное число байт, выделенных за один раз; максимальное выделение памяти за время работы программы; количество байт, когда-либо выделенных в программе с момента запуска.
- Дополнительная информация о блоке памяти. Можно узнать, сколько байт сейчас выделено под какой-либо объект.
Первые три эквивалентны функциям malloc, realloc, free. Отличия выделены жирным.
- smalloc
Принимает размер в байтах, выделяет память и возвращает указатель на выделенную область памяти. В случае неудачи печатает сообщение об ошибке в stderr и завершает программу. - srealloc
Принимает указатель для перевыделения и размер в байтах, возвращает указатель на выделенную область памяти (уменьшенную или увеличенную, сохраняя данные). Если указатель == NULL, то вызывает smalloc c нужным размером. В случае неудачи возвращает старый указатель, не давая случиться утечке памяти. - sfree
Принимает указатель на область памяти, освобождает его, ничего не возвращает. - getmemsz
Принимает указатель на область памяти, возвращает количество выделенных байт. - print_stats
Выводит в stderr статистику выделений памяти такого вида:Код: Выделить всё
Last allocation: 100 bytes Currently active: 450 bytes Biggest allocation: 200 bytes Maximum memory usage: 600 bytes Allocated in total: 10900 bytes
В архиве исходники, пример программы, использующей s_alloc, и скомпилированные бинарники этой программы для Windows и Linux.
- [url]svn://night-leshiy.ru/NiGHt-LEshiY/handy%20tools/s_alloc/[/url]