【发布时间】:2011-06-02 19:25:31
【问题描述】:
在 C/C++ 中你总是有
SizeOf(array[N] of T) = N * SizeOf(T);
在 Pascal/Delphi 中,您可以使用 'packed array' 来确保上述断言是正确的,但是 'packed' 说明符对 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 记录是不同的 - 它们可以被“解包”,因此由于字段对齐,结构的大小大于字段大小的总和。)
【问题讨论】:
-
我猜如果没有
packed修饰符,delphi 编译器的未来版本可能会使用非紧凑数组。就我个人而言,当且仅当我关心确切的内存布局时,我才使用packed。
标签: arrays delphi alignment packed