Модуль (Unit) также может содержать блок initialization (инициализация) и блок finalization (финализация).
Эти два фрагмента кода автоматически выполняются при запуске и завершении программы соответственно.
initialization: Запускается при старте программы, когда модуль загружается в память, раньше основного кода программы. Несколько модулей последовательно выполняют свои блоки инициализации в порядке подключения.
finalization: Выполняется непосредственно перед корректным закрытием программы и уничтожением процесса; порядок выполнения обратный порядку инициализации.
Назначение
Initialization: регистрация классов, открытие глобальных файлов / подключений к базам данных, инициализация глобальных переменных, регистрация компонентов;
Finalization: освобождение памяти, закрытие дескрипторов, сохранение настроек, снятие регистрации ресурсов для предотвращения утечек памяти.
Изменим файл модуля PAS из предыдущего урока: MyUnit.pas
unit MyUnit;
{$ifdef FPC}
{$mode objfpc}{$H+}{$J-}
{$endif}
interface
procedure MyProcedure(const A: Integer);
function MyFunction(const S: string): string;
implementation
procedure MyProcedure(const A: Integer);
begin
WriteLn('A + 10 is: ', A + 10);
end;
function MyFunction(const S: string): string;
begin
Result := S + 'strings are automatically managed';
end;
// Блок инициализации: запускается автоматически при загрузке модуля
initialization
WriteLn('Hello world!');
// Блок финализации: запускается автоматически перед корректным завершением программы
finalization
WriteLn('Goodbye world!');
end.Code language: JavaScript (javascript)
Внизу файла добавлены только эти два блока

Результат выполнения

Последняя строка «Goodbye world» отобразится только после нажатия клавиши Enter (когда программа будет завершаться).
Initialization и finalization