请问record类型数据的内存是不是连续的?麻烦大家指点一下 ( 积分: 50 )

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

xiezhy

Unregistered / Unconfirmed
GUEST, unregistred user!
请问record类型数据的内存是不是连续的?麻烦大家指点一下
 
在delphi内申请的单块内存,逻辑上都是连续的,至于物理上是否连续,一般情况下不用管它。
 
物理上也是连续的,
但包含string,variant等类型的要区别对待
 
如果是Packed,或者是加了编译开关{$A1 +}设置为1字节对其的记录,内部的成员都是连续的.
否则不保证一定是连续的.默认为4字节边界对其.
比如默认情况下
Type
PB = ^TB;
TB = record
I:Byte;
J:Integer
end;
var
B : TB;
begin

ShowMessage(IntToStr(Integer(@B.J) - Integer(@B.I)));
end;
显示的就是4.说明成员I,J之间有3个字节的空洞.
如果要连续的话要
TB = packed record
I:Byte;
J:Integer
end;
或加上{$A1 +}的编译开关
 
一般情况下对齐的.
当要对Record类型使用Sizeof()时,有String域就使用String[..]
 
多人接受答案了。
 
后退
顶部