关于实例占用内存的大小SIZEOF(41分)

  • 主题发起人 主题发起人 sqlserver2
  • 开始时间 开始时间
S

sqlserver2

Unregistered / Unconfirmed
GUEST, unregistred user!
type
TMyRecord = record
Str1, Str2, Str3: string;
Int1: integer;
B: Boolean;
Bu: TButton;
end;
var
Re: TMyRecord;
begin
Caption := IntToStr(Sizeof(Re));//24,
end;
记录的大小,由其成员,成员的类型来定,
请问一个form是怎定占用内存的多少的啊?
begin
Caption := IntToStr(Sizeof(form1));//4
end;
我已经在form1摆了很多控件的了,而且定义了一些成员;结果是跟没有摆控件,没有定义成员一样都是4,

一个实例所占的内存是由什么组成的?
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1081635
 
关键是看赋值时,右方的东西有否 Create 过程,有则变量是指针,没有则是数据本身,
Form1 一看就是指针,而且4字节的整数指针,Re 也不完全是数据本身,因为 Bu 是指
针,所以 24 也不是真实占用内存数。另外放控件到窗体,不等于改变了窗体内存结构,
只是控件的 Parent 属性或者说是 ParentWindow 句柄指向了窗体而已,没有 record
的那种“成员”的性质。
 
Sizeof(form1) 返回的是 form1 占用的空间, 而form1 其实就是一个指针, 你可以这么认为 form1 : pointer; 所以form1永远都是 4
 
>>Str1, Str2, Str3: string;
这些是不定长的字串,所以你不可能通过SIZEOF得到一个正确的值.
 
那么,如果想知道一个form,或者一个DELPHI程序占多大内存,能不能由这个程序本身来获取啊?
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := IntToStr(Self.InstanceSize);//764
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := IntToStr(Application.InstanceSize);//320
end;

form1比Application占的内存还大吗,这是怎么解释的
 
form1比Application占的内存还大吗,这是怎么解释的

它们都是单独的对象,不存在包含关系
 
那么如果要看整个程序占多大内存,又要怎判断
 
4是代表的大小长度,而不是大小,相当于一个Integer
 
Delphi 的先天缺陷,它写的程序都隐藏了一个 Application 的窗口,非常弱智,
用 API 把这个窗口显示出来,它很简单,所以占的内存比Form1还小。
 
多人接受答案了。
 
后退
顶部