=== record 与 packed record? ====

Dainy 2005-07-22 09:51:48
哪位仁兄告诉我以下两种记录的不同么?
1、==================================
PSysInfo = ^TSysInfo;
TSysInfo = record
UserID: string;
UserName: string;
end;

2、==================================
PSysInfo = ^TSysInfo;
TSysInfo = packed record //多了个packed
UserID: string;
UserName: string;
end;
...全文
234 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dainy 2005-07-25
  • 打赏
  • 举报
回复
OK.感谢各位。
constantine 2005-07-25
  • 打赏
  • 举报
回复
在Windows中内存的分配一次是4个字节的。而Packed按字节进行内存的申请和分配,这样速度要慢一些,因为需要额外的时间来进行指针的定位。因此如果不用Packed的话,Delphi将按一次4个字节的方式申请内存,因此如果一个变量没有4个字节宽的话也要占4个字节!这样就浪费了。
阿呆_ 2005-07-25
  • 打赏
  • 举报
回复
比如:
TA = record
a: Char;
b: Integer;
end;

TB = packed record
a: Char;
b: Integer;
end;
中:
TA.b位于TA结构开始处第4个字节, TB.b位于TB结构开始处第二个字节. 即TA结构中在TA.a和TA.b中间插了3个无用字节, 为了TB.b在内存中的地址是按字对齐的--即这个地址能被4整除, 而TB中则没有这些无用字节, 但是TB.b不是字对齐的, 对它的访问比对TA.b慢.
Dainy 2005-07-25
  • 打赏
  • 举报
回复
Linux2001(闭关开发中) 兄:

请教,字对齐是什么意思?
何鲁青 2005-07-22
  • 打赏
  • 举报
回复
用sizeof返回占用空间大小的时候packed record会比较准确一些,如果用在做通信上,最好定义成packed record
Linux2001 2005-07-22
  • 打赏
  • 举报
回复
第一种不带packed关键字的结构体表明编译器编译时要求进行字对齐,
而第二种带packed关键字的结构体表明编译器编译该结构体时不需要进行字对齐,这种方式对结构体中的字段访问会比第一种方式慢!但是更节约空间
diecode 2005-07-22
  • 打赏
  • 举报
回复
要看和什么系统通信了

16,743

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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