packed record和record的区别是什么?(14分)

  • 主题发起人 主题发起人 tswhq
  • 开始时间 开始时间
T

tswhq

Unregistered / Unconfirmed
GUEST, unregistred user!
别告诉我都是结构.
 
Delphi在编译时采用了按四字节对齐的作法(在32位机上).
TType = packed reord
i:int;
j:word;
end;
这样sizeof(TType)会返回6

TType =record
i: int;
j: word;
end;
sizeof(TType)会返回8
 
学习一下
 
一般应用只要使用record就可以了
在对内存要求特别单元的场合,比如串口通讯等等
就要使用packed record
 
带 packed的是压缩存储的,
不带 packed的是非压缩存储的.
就像MVB说的那样.
 
用record好一些,对齐后访问会快上那么0.000几毫秒。
具体快多少可以自己试试,对齐数据的好处..
 
用record是好,windows宁可牺牲空间以求增加速度
 
packed record一般兼容DLL中的C接口
例如

a=packed record
x:word;
y:integer;
end;
b=record
x:word;
y:integer;
end;

当 c:array[0..10] of char的时候
copymemory(c[0],@a,sizeof(a))的话。 packed record中的各数据直接连接式排列
也就是x:=1 y:=2的时候。内存表示为 01 00 02 00 00 00 长度刚好是8,是值

但是record 中 各项都带有地址指针。。。如果直接copymemory的话 复制出来不是值而是个地址指针。
 
例如你在网络上传输一段record就必须加上packed 这样才能将数据完整发送。
否则发过去就不是数据,而是发送端的数据的地址。
packed record相当于array char....
另外一个相当于pchar。大概就这样
 
packed record 严格大小
record 四字节对齐
packed record 拿性能换空间
record 拿空间换性能
 
例如你在网络上传输一段record就必须加上packed 这样才能将数据完整发送。
否则发过去就不是数据,而是发送端的数据的地址。
to yellowyellow
还有这种情况???
 
多人接受答案了。
 
后退
顶部