韩国秘密漫画名媛一夜:record, packed record和变体记录
来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 03:35:54
//Integer类型刚好是4个字节,ShortInt类型是1个字节,但是Windows中内存是4字节分配,
//所以这里其实还是4个字节,用SizeOf可以看到这个record的大小是8字节,这样虽然浪
//费了空间,但是加快了速度(Windows内存分配中的边界对齐原理)
TPerson = record
Age: Integer;
Sex: ShortInt;
end;
TPackedPerson = packed record
Age: Integer;
Sex: ShortInt; //使用packed record,用Sizeof可以看到这个record的大小是5字节;
end;
TEmployee = record
ID: Integer; //Integer是4字节
case Integer of
0:(YearMoney: Integer); //YearMoney和MonthMoney共用内存,按最大内存分配
1:(MonthMoney: ShortInt); //该record的大小是8字节
end;
TTagEmployee = record
ID: Integer;
case Grade: Integer of //这里加入了Grade变量
0:(YearMoney: Integer); //YearMoney和MonthMoney共用内存,按最大内存分配
1:(MonthMoney: ShortInt); //该record的大小是12字节(ID+Grade+YearMoney)
end;
Msg: Cardinal;
case Integer of
0: (
WParam: Longint;
LParam: Longint;
Result: Longint);
1: (
WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
ResultLo: Word;
ResultHi: Word);
end;
//所以这里其实还是4个字节,用SizeOf可以看到这个record的大小是8字节,这样虽然浪
//费了空间,但是加快了速度(Windows内存分配中的边界对齐原理)
TPerson = record
Age: Integer;
Sex: ShortInt;
end;
TPackedPerson = packed record
Age: Integer;
Sex: ShortInt; //使用packed record,用Sizeof可以看到这个record的大小是5字节;
end;
TEmployee = record
ID: Integer; //Integer是4字节
case Integer of
0:(YearMoney: Integer); //YearMoney和MonthMoney共用内存,按最大内存分配
1:(MonthMoney: ShortInt); //该record的大小是8字节
end;
TTagEmployee = record
ID: Integer;
case Grade: Integer of //这里加入了Grade变量
0:(YearMoney: Integer); //YearMoney和MonthMoney共用内存,按最大内存分配
1:(MonthMoney: ShortInt); //该record的大小是12字节(ID+Grade+YearMoney)
end;
1.在DELPHI中,我们用record关键字来表明一个记录,有时候,我们还会看到用packed record来声明的记录,这二者的区别就在于存储方式的不同;在windows中,内存的分配一次是4个字节的,而Packed按字节进行内存的申请和分配,这样速度要慢一些,因为需要额外的时间来进行指针的定位。因此如果不用Packed的话,Delphi将按一次4个字节的方式申请内存,因此如果一个变量没有4个字节宽的话也要占4个字节!这样浪费了一些空间,但提高了效率。
2.变体记录的规则:
(1)Long String、WideString、Dynamic Array、Interface的大小都是指针大小,OleVariant其实就是COM SDK中的VARIANT结构,大小是16字节。但在Object Pascal中它们都需要自动终结化,如果它们出现在variant part中,编译器就无法知道它们是否应该进行终结化――因为不知道当前存储的是哪种类型,因此他们不能出现在变体记录类型中,或者用类似String[10]来定义;
(2)所有变体字段共享一段内存,而共享内存的大小则由最大变体字段决定—“最长”的变量决定;
(3)当tag存在时,它也是记录的一个字段。也可以没有tag。
(4)记录的变体部分的条件域必须是有序类型——Case后面跟的类型必须是Boolean,Integer等等有序类型。
(5)记录类型中可以含有变体部分,有点象case语句,但没有最后的end,变体部分必需在记录中其他字段的声明之后。
3.最经典的变体记录,Delphi中的TMessage结构:
TMessage = packed record
Msg: Cardinal;
case Integer of
0: (
WParam: Longint;
LParam: Longint;
Result: Longint);
1: (
WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
ResultLo: Word;
ResultHi: Word);
end;
record, packed record和变体记录
vm1 work record
China's exchange reserves hit record level
Record. Observe. Feeling: 323552 - 会员作品 - Bil...
China eyes naval track record? - Focus discus...
New York City broiled in record
Will be on the record, and will be in the record.
China's yuan hits new record high at 6.6227 p...
China's annual FDI hits record 105 bln USD
Record. Observe. Feeling: 封面副本 - 会员作品 - BillW...
China's grain imports volume hits record high...
Full Text of Human Rights Record of the Unite...
US human rights record slammed by Amnesty International
China's annual FDI hits record 105 bln USD 1
China's yuan advances to record high against ...
Full Text of Human Rights Record of the United States in 2010
临床信息系统,CIS,电子病历专家网,电子病历编辑器,电子病历系统,EPRExpert,patient,record,XML,DICOM,HL7,ICD9,医生科研病例系统,ACRKEY,结构化,电子签名,安全性
纪念邮资明信片(JP系列)中的变体、变异和趣味品
变体票,趣味品
变体邮票种类
现代的变体佛教
周杰伦和蔡依林的QQ记录(爆笑)
Hadoop配置和使用问题记录 - 博客文库 - 博客园
你会记录和利用课堂笔记吗?