Управление памятью

b

Обзор подсистемы управления памятью в Delphi

Корректная работа с памятью — основа производительности Delphi-приложений. В среде Delphi встроенный менеджер памяти FastMM предоставляет детерминированные характеристики выделения и освобождения блоков. Основные технические параметры FastMM: минимальный размер блока — 8 байт (для 32-битных сборок), шаг выравнивания — 4 или 8 байт в зависимости от архитектуры, пулы потоков (thread-local heaps) для уменьшения конкуренции. Спецификации FastMM определяют три режима: FullDebugMode (полная отладочная трассировка), LLeakCheck (обнаружение утечек) и Release (оптимизированная версия).

Материалы и технические детали

Для углублённого изучения предлагаются следующие материалы (в составе сайта):

Отличия FastMM от альтернативных менеджеров памяти

Основные различия между FastMM и сторонними решениями (например, TBB malloc, jemalloc, system heap Windows):

  1. Фрагментация: FastMM использует битовые карты для пулов фиксированного размера, что снижает внешнюю фрагментацию до 1-2% в типовых сценариях. Альтернативы (jemalloc) требуют адаптации под Delphi-ABI.
  2. Отладочная функциональность: FastMM в FullDebugMode автоматически проверяет границы блоков (overwrite/underwrite), что отсутствует в heap-менеджерах ОС.
  3. Производительность многопоточных сценариев: FastMM использует номер ядра CPU (GetCurrentProcessorNumber) для локальных кэшей, тогда как стандартный менеджер Windows (HeapAlloc) полагается на глобальные блокировки.
  4. Поддержка подкачки (memory-mapped files): FastMM не предоставляет нативных средств — для больших массивов данных рекомендуется применять класс TMemoryStream или прямые вызовы VirtualAlloc.

Стандарты изготовления и контроля качества

При разработке приложений в Delphi рекомендуется соблюдать следующие стандарты управления памятью (на основе материалов сайта):

Пример настройки FastMM (фрагмент для вставки)

Для включения режима обнаружения ошибок без изменения кода модуля достаточно разместить в начале проекта (до uses):

// Включение FullDebugMode с проверкой границ
// Параметр: EnableMemoryLeakReporting := True

В секции конфигурации (FastMM4Options.inc) можно задать:

Рекомендация: в релизных сборках использовать только {$UNDEF FullDebugMode} и {$DEFINE Release} для максимальной скорости (до 30% прироста производительности по сравнению с отладочной версией).

Добавлено: 27.04.2026