一个关于SizeOf的问题(100分)

  • 主题发起人 主题发起人 xiaoywh
  • 开始时间 开始时间
X

xiaoywh

Unregistered / Unconfirmed
GUEST, unregistred user!
type<br> &nbsp;TRec = Record<br> &nbsp; &nbsp;c : char;<br> &nbsp; &nbsp;b : integer;<br> &nbsp; &nbsp;a : Word;<br> &nbsp;end;<br>var<br> &nbsp;r: TRec;<br>begin<br> &nbsp;ShowMessage(IntToStr(SizeOf(r))+'&lt;&gt;'+<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IntToStr(SizeOf(r.b))+' &nbsp;'+<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IntToStr(SizeOf(r.a))+' &nbsp;'+<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IntToStr(SizeOf(r.c)));<br>end;<br><br>大家可以看看结果为什么数据的长度不等于成员总加值的长度,另外还有一个现象:将数据r内成员a,b,c的定义顺序调换一下,结果又会发生很大的变化,原因何在?
 
已解决!谁要分就顶一下就.
 
delphi record 内数据自动对齐啊
 
那就顶呗~
 
来自:LSUPER, 时间:2006-6-3 1:22:37, ID:3460799<br>delphi record 内数据自动对齐啊 &nbsp;<br><br>正解
 
TRec = packed Record<br>这样就等于了吧
 
楼主能否说下答案呢?想知道,呵呵
 
TRec = Record<br> &nbsp; &nbsp;c : char;<br> &nbsp; &nbsp;b : integer;<br> &nbsp; &nbsp;a : Word;<br> &nbsp;end;<br>Sizeof(TRec)应该是12<br>为了提高访问b这个整型,必须 4字节对其. A也是,所以 4*3=12
 
顶,还是不明
 
32位的计算机默认是按照4字节对齐,不足的补充到4的倍数长度,eg:<br>TRec = Record<br> &nbsp; &nbsp;c : char;<br> &nbsp; &nbsp;a : Word;<br> &nbsp; &nbsp;b : integer;<br> &nbsp;end;<br>Sizeof(TRec)应该是 4+4=8<br><br>TRec = Record<br> &nbsp; &nbsp;c : char;<br> &nbsp; &nbsp;a : Word;<br> &nbsp; &nbsp;b : integer;<br> &nbsp; &nbsp;d : DWord ;<br> &nbsp; &nbsp;e : &nbsp;char ;<br> &nbsp;end;<br>Sizeof(TRec)应该是 4+4+4+4=16
 
多人接受答案了。
 
后退
顶部