# Модель памяти FZLang использует scope-based RAII: объект принадлежит окружению, в котором создан, и освобождается при уничтожении этого окружения. Отдельного сборщика мусора нет. ## Окружения Глобальная программа, функция и каждый блок получают окружение. В нём хранятся имена и значения переменных. При поиске имени VM проверяет текущее окружение, затем внешние. После return локальное окружение функции закрывается. Возвращаемый объект переносится в родительское окружение, чтобы пережить этот момент. ## Владение объектом Передача объекта во вложенный вызов позволяет использовать его во внутреннем окружении. Операция `ESCAPE_OBJECT` переносит возвращаемый объект и его дочерние объекты наружу. ``` fn make() Animal { Animal result = new Animal; return result; } ``` Числа, булевы значения и строки хранятся как значения контейнера ВМ. Объектное значение содержит указатель на структуру экземпляра, а поля занимают числовые слоты класса. Объект не следует использовать после завершения окружения, которому он принадлежал. Возвращайте его из функции или храните в объекте/окружении с большим временем жизни. --- Назад: [Классы и объекты](./05_classes-and-objects.md)