菜鸟问题:packed record 是什么意思?

jianxin_js 2003-09-11 11:50:36
tagTVITEMA = packed record
mask: UINT;
hItem: HTreeItem;
state: UINT;
stateMask: UINT;
pszText: PAnsiChar;
cchTextMax: Integer;
iImage: Integer;
iSelectedImage: Integer;
cChildren: Integer;
lParam: LPARAM;
end;

是不是与C中的struct相似??
...全文
64 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Delphi_Li 2003-09-12
  • 打赏
  • 举报
回复
加Packed就是为了
1、使用sizeOf得到记录的真实大小。
2、节省内存空间。
3、保证与其他程序通讯的正确性。
....

比如你编写一个通讯程序,定义的记录大小为10用来存储现金,如果这时你让Delphi优化了这个记录,天知道金额会变成什么!!!
zjqyb 2003-09-12
  • 打赏
  • 举报
回复
是为了兼容性
jianxin_js 2003-09-12
  • 打赏
  • 举报
回复
那么加了packed不优化,有什么用处??
yown 2003-09-11
  • 打赏
  • 举报
回复
小试菜刀
 
就是对文本进行压缩
Delphi_Li 2003-09-11
  • 打赏
  • 举报
回复
对!!!
jianxin_js 2003-09-11
  • 打赏
  • 举报
回复
也就是加了packed后,其大小是5个字节,对吗?
Delphi_Li 2003-09-11
  • 打赏
  • 举报
回复
Packed关键字是与编译有关的!!!

在默认情况下,Delphi编译器是对数据进行优化的!!!

例如:
TX = Record
A : Char;
B : Integer;
End;

在这个记录中,TX的大小应该是5个字节,但是由于Delphi的优化,Tx的大小变成了8个字节,所以为了得到TX的真实大小,这个时候就要使用Packed关键字了,禁止进行优化!!!一般Packed关键字在使用C++/C的API汉书中用得比较多,一般Delphi内部自己的程序不需要使用Packed关键字,除非你想得到某个对象的真实大小!!!
为什么优化:
举一个现实生活中的例子,架设又连个杯子,一个装满了水,另一个只装了1/3的水,那么实际物理上这些水占用了两个杯子,因为我们不能说占了4/3的杯子,因为我们没办法得到2/3的杯子。在这一杯子就是CPU中的寄存器,TX对象中的A,虽然只有一个字节,但它却占用了一个寄存器的空间(4个字节,这就是32位计算机,如果是64位计算机,一个寄存器的大小将变成8个字节),所以经过优化的结果是TX的大小是8。优化的数据可以提高执行效率,因为我们不必关心杯子里到底有多少水,1/4?1/3?1/2...,我们只要关心那些水占据了一个杯子,这样会节省大量的分析杯子里有多少水的时间!!!这就是Packed的作用!!!
ahjoe 2003-09-11
  • 打赏
  • 举报
回复
to Delphi_Li(Delphi Li), 佩服,说得浅显易懂。

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧