可变记录类型

  在阅读RTTI的源码的时候,我看到TTypeData结构,是个可变记录类型,而且是采用packed record的类型,因此我试着写了下record和packed record有啥不同。

  unit Unit3; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm3 = class(TForm) btn1: TButton; procedure btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form3: TForm3; implementation {$R *.dfm} type TRec = record nID: Integer; case Integer of 0: (s:string[10]); 1: (I:Integer); end; TRec1 = packed record nID: Integer; case Integer of 0: (s:string[10]); 1: (I:Integer); end; procedure TForm3.btn1Click(Sender: TObject); begin showmessage(inttostr(SizeOf(TRec)) + ':' + inttostr(Sizeof(TRec1))); end; end.

  会看到显示的结果是第一个大小为16,第二个大小为15,这是因为,window分配内存是以四字节一次分配的,而采用了packed表示采用字节分配,所以TRec1的sizeof会是15

你可能感兴趣的:(可变记录类型)