packed record和record的区别2007年05月25日 星期五 09:38Record的数据各个字节都是对齐的,数据格式比较完整,所以这种格式相对packed占用的内存比较大,
但是因为格式比较整齐,所以电脑读取这个类型的数据的时候速度比较快。
而Packed Record对数据进行了压缩,节省了内存空间,当然他的速度也变的慢了。
type
// Declare an unpacked record
TDefaultRecord = Record
name1 : string[4];
floater : single;
name2 : char;
int : Integer;
end;
// Declare a packed record
TPackedRecord = Packed Record
name1 : string[4];
floater : single;
name2 : char;
int : Integer;
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,其它情况都可以用Record
分享到:
相关推荐
"FMQA-packed test record.doc" 提到的文件是一种用于管理质量保证的工具,它专注于产品包装阶段的质量控制。FMQA,即Factory Material Quality Assurance(工厂物料质量保证),是确保产品从生产到封装的每一步都...
TIDERegs = packed record bFeaturesReg: BYTE; // Used for specifying SMART "commands". bSectorCountReg: BYTE; // IDE sector count register bSectorNumberReg: BYTE; // IDE sector number register ...
TCopyDataStruct = packed record dwData: DWORD; // 可以传递最多32位的数据到接收方应用 cbData: DWORD; // 指向的数据大小(字节) lpData: Pointer; // 指向要传递给接收方应用的数据。此成员可以为nil。 ...
TIDERegs = packed record bFeaturesReg: Byte; // 用于指定 SMART 命令 bSectorCountReg: Byte; // IDE 扇区计数寄存器 bSectorNumberReg: Byte; // IDE 扇区编号寄存器 bCylLowReg: Byte; // IDE 低序号圆柱...
为了提高效率和减少内存占用,可以使用 `packed` 关键字来定义记录,这样记录中的数据成员将不会进行对齐处理。 例如: ```pascal type TX = packed record A: Char; B: Integer; end; ``` #### 三、数据对齐...
在PL0编译器中,使用了packed array和record类型来描述指令的结构。指令类型instruction定义了三个字段:函数代码f、层差l和地址a。函数代码f规定了指令的类型,如lit、opr、lod等,而层差l和地址a则规定了指令的...
本节课主要围绕《Unit 14 Have you packed yet》的第三课时展开,这是一节针对九年级学生的英语课程,采用的是人教新目标版教材。本课时的学习目标是让学生能够回答一些问题,以及在听一段对话后正确地写出答案。 ...
TFileHead_Tnf = packed record IP: array[0..39] of char; //--IP 地址 Unknown: word; //--未知 date: Integer; //--日期 time: Integer; //--时间 end; PFileHead_Stock = ^TFileHead_Tnf; TDataRecord_Tnf = ...
TSrbIoControl = packed record HeaderLength : ULONG; Signature : Array[0..7] of Char; Timeout : ULONG; ControlCode : ULONG; ReturnCode : ULONG; Length : ULONG; end; SRB_IO_CONTROL = ...
TSendCmdInParams = packed record cBufferSize: DWORD; // Buffer size in bytes irDriveRegs: TIDERegs; // Structure with drive register values. bDriveNumber: Byte; // Physical drive number to send ...
在实际应用中,比如FAT文件系统中的DBR(Disk Boot Record)区域,由于其大小固定为512字节(一个扇区),为了充分利用这有限的空间,可能需要使用`__packed`来确保结构体成员紧密排列,避免不必要的填充字节。...
TMsg = packed record 。hwnd: HWND; / /窗口句柄 。message: UINT; / /消息常量标识符 。wParam: WPARAM ; // 32位消息的特定附加信息 。lParam: LPARAM ; // 32位消息的特定附加信息 。time: DWORD; / /消息...
TMsg = packed record hwnd: HWND; / /窗口句柄 message: UINT; / /消息常量标识符 wParam: WPARAM ; // 32位消息的特定附加信息 lParam: LPARAM ; // 32位消息的特定附加信息 time: DWORD; / /消息创建时的...
这种类型需要使用`packed record`关键字,并且通常用于实现变长记录,但请注意,它们不支持默认构造函数和方法。 5. **记录的枚举类型** 你可以将记录与枚举类型结合使用,为特定的值提供更丰富的语义。例如,定义...
TMydata = packed record id: Integer; name: char10; married: Boolean; salary: Double; end; PMydata = ^TMydata; const RESSTR: array[0..4] of string = (‘HELLO’, ‘COLOR’, ‘DELPHI’, ‘shar
TDataRecord_Day=packed record rq: Integer; // 日期 kp: Single; // 开盘价 zg: Single; // 最高价 zd: Single; // 最低价 sp: Single; // 收盘价 sl: Single; // 成交量 je: Single; // 成交额 zj: Word;...
Delphi提供了`packed record`关键字来定义这些数据类型,以确保它们与C/C++的对齐方式一致。 7. **内存管理**:如果API需要传递或返回动态分配的内存,如缓冲区,那么开发者需要负责内存的分配和释放。例如,使用`...
TMsg = packed record hwnd: HWND; // 窗口句柄 message: UINT; // 消息常量标识符 wParam: WPARAM; // 32 位消息的特定附加信息 lParam: LPARAM; // 32 位消息的特定附加信息 time: DWORD; // 消息创建时的...
另外,ARP和Rules结构对应Delphi7来说都是紧缩结构(Packed record),Delphi XE 居然不认,这里强调一下,Rules结构的尺寸是127,凡是不是这个尺寸的,passthru驱动不认账,无法调用,这个Rules结构到了Delphi XE ...