8.2.12. Объекты

На верх  Назад  Вперёд

Объекты хранятся в памяти как обычные записи с дополнительным полем: указателем на таблицу виртуальных методов – Virtual Method Table (VMT). Это поле записывается первым, а все поля объекта записываются в том порядке, в каком они объявлены (с возможным выравниванием поля адреса, если объект был объявлен как packed).

VMT инициализируется путём вызова метода объекта Constructor.Если для вызова конструктора был использован оператор new, то поля данных объекта будут храниться в динамической памяти (куче), иначе они будут непосредственно записаны в раздел данных исполняемого файла.

Если объект не имеет виртуальных методов, указатель на VMT не устанавливается.

Объём выделяемой памяти выглядит так, как показано в таблице 8.4.

Таблица 8.4. Распределение памяти для объекта (32-разрядная модель)

Смещение

Содержимое

+0

Указатель на VMT (не обязательно)

+4

Данные. Все поля в порядке объявления

 

Таблица виртуальных методов (VMT) для каждого объектного типа состоит из двух контрольных полей (содержащих размер данных), указатель на VMT объекта-предка (Nil, если предка нет), а затем указатели на все виртуальные методы. Макет VMT показан в таблице 8.5. VMT создаётся компилятором.

Таблица 8.5. Распределение памяти для VMT объекта (32-разрядная модель)

Смещение

Содержимое

+0

Размер данных объектного типа.

+4

Минус размер данных объектного типа. Позволяет определить правильность указателей VMT.

+8

Указатель на VMT предка, Nil, если нет доступных предков.

+12

Указатели на виртуальные методы.