давайте я вам тут еще слегка накину ) type t = packed array of integer; t2 = packed class end; t3 = packed object end;
t2 и t3 понятно - тоже что и со структурами, а вот с массивом не понятно зОчем?!
вот что пишут интернеты: Arrays are aligned according to the alignment of the array’s base type
то есть выравнивание существует и в массивах. и вот упаковка убирает её как я понимаю
выравнивание по базовому типу - т.е. по самому они упакованы один к одному без промежутков нечего там убирать то... 🤷♂️
вот не понятно. вроде массивы уже и так упакованы
в той справке что была в оригинале на скрине, говорилось про выравнивание на слово либо двойное слово
если массив рекордов размером 3 байта, видимо, будет выравнивание на границу 4 байт для каждого элемента
как насчет массива из record d: double; b:bool end
тэкс, к массиву рекордов вопросов нет я именно про пример в справке - нафига там пример такой странный, ну тупо же упаковывать массив Real'ов
увы t4 = packed record arr: array[0..2] of byte; end; t = array[0..1] of t4; SizeOf(t) = 6. что с пакет(t), что без
судя по real этот кусок написали во времена turbo pascal
а раньше Real был не элементарным типом? а структурой\объектом?
без packed где? в структуре или массиве?
в массиве. я там пометил
ну так структура с packed - всё логично, будет 6 байт
раньше real был 6 байт софт-флоат
ну короче раньше он компилятором выравнивался и если объявили array [0..5] of Real то указателем уже просто не пробежишься, а только с учётом того что там есть gap'ы ?
в общем размер = 6 байт с любой комбинацией packed или без них вообще
t4 = record b1: byte; b2: byte; b3: byte; end; во так сделал, опять 6 😂
Замени на Boolean
6 что за нах? )
Ну, потому что Boolean занимает 1 байт
{$A-} или {$ALIGN OFF} - эт как аналог #pragma pack(1)
Обсуждают сегодня