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,一个实例所占的内存是由什么组成的?

解决方案 »

  1.   

    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占的内存还大吗,这是怎么解释的
      

  2.   

    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有实际大小;
      

  3.   

    是的,本还傻傻地认为Application的大小是整个程序的大小;
    怎知道一个project占内存多大的?
      

  4.   

    你所说的 form1 是一个变量,是一个 TForm 类型的变量,也是一个指针Pointer,而一个指针在32位计算机中就是32位长,占4byte 所以得到的是 4
    TMyRecord = record
        Str1, Str2, Str3: string; 也是指针,这三个占 24byte
        Int1: integer; //4byte
        B: Boolean; //4byte
        Bu: TButton; //指针 4byte
      end;至于指针指向的真实数据占用多少空间,则在创建时分配内存时决定,如果你没有保存下来是没有办法知道的。