纪录类型sizeof问题~~~~~抢分呵~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

flyinwuhan 2005-04-14 10:11:01
type
arec = record
s : string[10];
i : integer;
end;

so, sizeof(arec) = ???
不许编译,第一个回答对的50分,解释清楚为什么的100分,剩下20分分给顶的兄弟~~~
...全文
108 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
halfdream 2005-04-15
  • 打赏
  • 举报
回复
晕..慢了5秒钟...昨天发贴时间倒是同一秒.
flyinwuhan 2005-04-14
  • 打赏
  • 举报
回复
To gzmhero(hihihi):
抱歉啊,结帖的时候分给错了~~~你应该150啊~~~~~不要生气,下次~~~~~~~~~~
flyinwuhan 2005-04-14
  • 打赏
  • 举报
回复
>>Options里若设置了不同的Record Field alignment有不同的结果
当然是默认的8

原来这么简单~~~~~~不过以前俺一直以为s : string[8]; 和s : array[0..7] of char;占用一样地空间~~~没有想到还要存放长度~~~~一直以为短字符串和Array of Char兼容的~~~短字符串存放什么长度嘛

谢谢~~
hatum 2005-04-14
  • 打赏
  • 举报
回复
integer 占4个字节
实际的string[8]占9个字节
string[8]中的每一个字符占1的字节

但是在记录中, 会以较大的数据类型为基准'分块' 所以这里每一块为4个字节(integer占4个)
9/4=2.25, 由于是4个字节分一块,所以这里String[8]由3个'块组成' 也就是占12个字节
加上integer的4个 一共16个字节

这样对吗?
ehom 2005-04-14
  • 打赏
  • 举报
回复
13,14或16
gzmhero 2005-04-14
  • 打赏
  • 举报
回复
Options里若设置了不同的Record Field alignment有不同的结果。
linzhengqun 2005-04-14
  • 打赏
  • 举报
回复
楼主的分不够啊,看来那个150分是没戏了,
不如把乘下的20给俺吧,嘻嘻。
ehom 2005-04-14
  • 打赏
  • 举报
回复
条件不足,没答案

按照默认设置是16
halfdream 2005-04-14
  • 打赏
  • 举报
回复
arec = record
s : string[8];//9字节
i : integer;//4字节。
end;

9+4 =13。。。然后4字节取整。。16字节。。
gzmhero 2005-04-14
  • 打赏
  • 举报
回复
应该是3*4+4=16;

string[8],是分配9个byte的空间,string[0]是存放string的长度,string[1]---string[8]是申请的串。在D结构中,按照4个字节对齐,所以这里是有3个,共12个字节。

integer,4个字节。
所以共16个字节。

arec = packed record
s : string[8];
i : integer;
end;
按照字节对齐,就是8+1+4=13了。
flyinwuhan 2005-04-14
  • 打赏
  • 举报
回复
不对,上面写错了,应该是:
type
arec = record
s : string[8];
i : integer;
end;

5,392

社区成员

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

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