Packed record VS record
例子:
type
myrec = packed record
n1 : integer; 4个字节
n2 : shortint; 1个字节
end;
sizeof(myrec)------ 5
type
myrec = record
n1 : integer;
n2 : shortint;
end;
sizeof(myrec)------ 8
再如:
Record的数据各个字节都是对齐的,数据格式比较完整,所以这种格式相对packed占用的内存比较大,
但是因为格式比较整齐,所以电脑读取这个类型的数据的时候速度比较快。
而Packed Record对数据进行了压缩,节省了内存空间,当然他的速度也变的慢了。
type
// Declare an unpacked record
TDefaultRecord = Record
name1 : string[4]; // 5 byte 回为按4字节存储。所以分解为 4+1(1也是按4字节对齐所)所以总长度为 4+4=8字节长
floater : single; // 4 byte
name2 : char; // 1 byte 按4字节对齐。
int : Integer; // 4 byte
end;
// Declare a packed record
TPackedRecord = Packed Record
name1 : string[4]; // 5BYTE
floater : single; // 4 BYTE
name2 : char; // 1 BYTE
int : Integer; // 4 BYTE
end;
var
defaultRec : TDefaultRecord;
packedRec : TPackedRecord;
begin
ShowMessage('Default record size = '+IntToStr(SizeOf(defaultRec)));
ShowMessage('Packed record size = '+IntToStr(SizeOf(packedRec)));
end;
Default record size = 20
Packed record size = 14
不过,对于现在的操作系统来,packed Record 节省的那些空间已不用考虑他了。除了做DLL(不用packed容易造成内存混乱)和做硬件
编程时(比如串口)编程时必须用到packed Record,其它情况都可以用Rec
浙公网安备 33010602011771号