在声明一个类时,用packed record 同用record有什么区别???解释的详细一些!!!(100分)

  • 主题发起人 主题发起人 hebiao
  • 开始时间 开始时间
H

hebiao

Unregistered / Unconfirmed
GUEST, unregistred user!
在声明一个类时,用packed record 同用record有什么区别???
 
好像用了packed后数据会压缩,但速度变慢,不知对不对。
下面是DELPHI的帮助原文。

By default, the values in a structured type are aligned on word or double-word boundaries for faster access. When you declare a structured type, you can include the reserved word packed to implement compressed data storage. For example,

type TNumbers = packed array[1..100] of Real;

Using packed slows data access and, in the case of a character array, affects type compatibility. For more information, see Memory management.
 
Packed record 是字节对齐
比如
packed record
b1:byte
i:inetegr
b2:byte
end 只占用6字节,


record
b1:byte
i:inetegr
b2:byte
end
占用12个字节,保证i是在dword的地址开始,为了性能。

delphi缺省使用 没有packed 的

Packed 还有一个要考虑的地方就是,如果你要做DLL的话,那么参数的传递就要用.
Packed的,否则很容易造成内存的写乱.
 
好像DELPHI是自动对记录PACKED的。

没有PACK的快一点,但占用的内存大一些。
PACK的也慢不了多少,但占用内存会少一些。
 
Packed是压缩存储方式
 
对Packed Record节省内存,速断慢了一点
YellowMoon说的好像很详细
 
我刚学的时后也问了一个同样的问题...有意思....
 
32位计算机一般是双字对齐的,有利于提高运算速度.
record
b1:byte
i:inetegr
b2:byte
end;
如下占用空间:
0 1 2 3 4 5 6 7 8 9 10 11
b1- i----------------------- b2---

packed record
b1:byte
i:inetegr
b2:byte
end
如下占用空间:
0 1 2 3 4 5 6
b1- i----------------------- b2---
 
Packed是压缩存储方式
在pascal中,用packed的方式进行存储,在内存中站用的地方少一些,如楼上有人说的,
但是在使用的时候速度会慢一些(在pascal中是这样)
 
packed是会慢,一些但是不光是pascal,这跟cpu寻址,读内存的方式有关,字长32bit的
cpu一般要求双字对齐
 
多人接受答案了。
 
后退
顶部