Delphi如何获取结构体在内存所占的字节?

xtfnpgy 2013-12-07 05:45:53
以下的记录(结构)变量在内存占多少字节?
type
a = packed record
v1: Byte; 1
v2: Word; 2
v3: string[16] 17;
v4: Double; 8
v5: string; 4
v6: TForm; 4
end;


后面的数字是我用SizeOf获取出来的大小,但是我查了书籍都不对,Double占8个字节,string也是8个字节,求解?string[16]是什么类型?请给出答案和解释
...全文
768 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xtfnpgy 2013-12-10
  • 打赏
  • 举报
回复
谢谢你的回答!
xtfnpgy 2013-12-08
  • 打赏
  • 举报
回复
那就是说a=packed record //直接用sizeof就可以了 要是a=record //不进行压缩,那结果是什么呢
sololie 2013-12-08
  • 打赏
  • 举报
回复
实际编程中sizeof就可以了,如果说你是在跟书中的比较发现大小不一样,那就得注意是否packed了,具体可以搜 内存 字节对齐
sololie 2013-12-07
  • 打赏
  • 举报
回复
得看packed没了 a = packed record //加 packed顾名思义就是将内存进行了压缩,时间换空间 a = record //默认方式,不进行压缩,占用内存比上面的多,空间换时间
xtfnpgy 2013-12-07
  • 打赏
  • 举报
回复
所以获取的方法直接用SizeOf得到就可以了是吗?
sololie 2013-12-07
  • 打赏
  • 举报
回复
v3: string[16]
限定这个string只能装16个char,赋值时超过16个之后的被丢弃
string[1]是保留用来记录string长度的,所以v3= 16+1=17

32位系统下,指针自然是4字节,string、ftorm这些都是引用(指针)类型,都是4字节
byte、word、double这些是值类型,byte1字节,word2字节,
double和real都是8字节,single是4字节
xtfnpgy 2013-12-07
  • 打赏
  • 举报
回复
那上面说的并不明白啊,在内存中所占字节是那个表的字节?
sololie 2013-12-07
  • 打赏
  • 举报
回复

830

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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