Есть ли разница между массивом и упакованным массивом в Delphi?

В C / C ++ у вас всегда есть

SizeOf(array[N] of T) = N * SizeOf(T);

В Pascal / Delphi вы можете использовать «упакованный массив», чтобы убедиться, что приведенное выше утверждение истинно, но имеет ли спецификатор «упакованный» какое-либо практическое значение для массивов в Delphi? Я не могу создать пример «распакованного» массива, массивы кажутся всегда «упакованными»:

type
  A = array[0..2] of Byte;
  B = array[0..99] of A;
  C = packed record
    C1, C2, C3: Byte;
  end;
  D = array[0..99] of C;

procedure TForm10.Button1Click(Sender: TObject);
begin
  Assert(SizeOf(A) = 3);
  Assert(SizeOf(B) = 300);
  Assert(SizeOf(D) = 300);
end;

(Структуры C / C ++ и записи Delphi разные - их можно «распаковать», чтобы размер структуры был больше суммы размеров полей из-за выравнивания полей. )

15
задан Andreas Rejbrand 9 July 2017 в 20:55
поделиться