Уже есть много хороших ответов, но один момент, который еще не был упомянут ...
Существует множество «утечек», которые не обнаруживаются большинством детекторов утечек памяти, поскольку память освобождена, но после этого она больше не используется. Например, объект сложен в TObjectList. Объект помещается в список объектов, но после того, как вы его используете, вы не освобождаете его. Они будут уничтожены при уничтожении списка объектов (когда приложение закрывается для примера, при условии OwnsObject = True). Поскольку объекты фактически освобождаются, объекты не «просочились», но все же заставляют ваше приложение с течением времени использовать все больше и больше памяти.
FastMM не будет сообщать о них, поскольку он только выполняет «полный прогон» анализа. Чтобы обнаружить их, вам нужен детектор утечки памяти, который позволяет выполнять частичные прогоны, то есть анализировать то, что «просочилось» между точкой A и точкой B во время выполнения. AQTime, о котором упоминал Юджин, разрешает подобные проверки. Но имейте в виду, что это требует небольшого анализа, потому что это даст много ложноположительных результатов (почти все операции "realloc" будут помечены как утечка).