Структура и размер Записи

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

На структуру и размер записи влияют пять аспектов:

Размер его полей.

Запрос на выравнивание полей, которое зависит от платформы. Обратите внимание, что запрос на выравнивание полей внутри записи могут отличаться для разных (на разных платформах) переменных этого типа. Кроме того, на расположение поля внутри записи могут также влиять требования к выравниванию записи.

Текущая активная установка {$ALIGN N} или {$PACKRECORDS N} (эти параметры переопределяют друг друга, поэтому действует последний; обратите внимание , что эти директивы не должны принимать одни и те же аргументы, обратитесь к Справочник программиста Free Pascal для получения дополнительной информации).

Текущая установка параметра {$CODEALIGN RECORDMIN = X}.

Текущая установка параметра {$CODEALIGN RECORDMAX = X}.

Расположение и размер вариантных частей записей определяется путем замены их с поля, тип которого является запись с первым элементом поле типа поля тега , если идентификатор был объявлен для этого поля тега, за которым следуют элементы самой большой вариант.

Расположение и размер вариантных частей записей определяется путем наложения (в памяти) всех вариантных полей одного ранга, таким образом поля что поля одного типа могут быть преобразованы в поля другого, таким образом размер всей записи определяется самой большой вариантной частью.

Смещение каждого следующего (F2) поля, это сумма смещения и размера предыдущего поля (F1), оно округляется до степени двойки (F2). Требуемое выравнивание рассчитывается следующим образом:

Выравнивание будет по умолчанию для полей данного типа, оно может корректироваться если, нужно для данного типа в записи.

Если требуемое выравнивание хуже, чем активная в настоящее время установка {$CODEALIGN RECORDMIN = X}, то применяется значение X.

Если в данный момент активна установка {$ALIGN N} или {$PACKRECORDS N}

oчисловое значение: если требуемое выравнивание больше, чем N, оно изменяется на N. Т.е. если N равно 1, то все поля будут размещены друг за другом.

oRESET  или DEFAULT: результат выравнивания зависит от целевой платформы.

oC :выравнивание регулируется правилами, указанными в официальном ABI (Application Binary Interface) (Двоичный (бинарный) Интерфейс Приложений)  для текущей платформы.

oPOWER/POWERPC, MAC68K: значение выравнивания определяется официальными правилами ABI для соответственно платформ Macintosh PowerPC (классического ) или Macintosh 680x0.

Размер записи равен сумме размеров всех полей записи, при этом смещения каждого поля это размер предыдущего округлённый до кратного требуемому выравниванию для записей. Выравнивание записей определяется следующим образом:

Общее выравнивание выбирается исходя из выравнивания каждого поля в записи, как поля с наибольшим выравниванием.

Если текущая установка {$ALIGN N} или {$PACKRECORDS N} отличается от выравнивания в C и выравнивание больше, чем активная {$CODEALIGN RECORDMAX=X}, то выравнивание изменяется на X.

Если текущая установка {$ALIGN N} или {$PACKRECORDS N} равен C, то нужное выравнивание определяется официальными правилами ABI.