Такие инструменты обычно инструмент исполняемый со своим собственным кодом. например, они заменяют каждый вызов malloc ()
и free ()
своими собственными функциями, которые позволяют им отслеживать каждое выделение.
В Visual Studio это можно сделать автоматически, используя только библиотеку времени выполнения C, используя функции из семейства _CrtDumpMemoryLeaks ()
Для базового обнаружения утечек достаточно подключиться к низкоуровневым процедурам выделения памяти, например, путем исправления malloc/free. Затем вы отслеживаете все выделения и впоследствии сообщаете о тех, которые не были освобождены в нужный момент, например, непосредственно перед выходом.
Для реальной работы valgrind работает достаточно хорошо. Он обнаруживает недопустимые операции чтения / записи и утечки памяти.
Для хобби-проекта вы можете создать свой собственный модуль управления памятью, который отслеживает распределение различных указателей и их использование. Если вы не видите, что какое-то место памяти используется в течение длительного времени, это может быть утечка.
Вы можете поискать примеры кода некоторых BSD-реализаций инструментов управления памятью/профилирования. Например, http://code.google.com/p/google-perftools/wiki/GooglePerformanceTools