Delphi TObject实现了一个InstanceSize()方法

本文通过一个Delphi示例程序展示了对象的内存布局细节,包括对象大小及其成员变量的地址,有助于理解Delphi中对象的存储机制。

 

 

 

 

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;

    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
private
    { Private declarations }
public
          FMember5 : Integer;
          FMember6 : Integer;
          FMember7 : WORD;
          FMember8 : Integer;
    { Public declarations }
end;

TMyClass = class //创建一个类
Public
FMember1 : Integer;
FMember2 : Integer;
FMember3 : WORD;
FMember4 : Integer;
End;

 


var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Obj : TMyClass;
begin
Obj := TMyClass.Create(); //创建TMyClass类的实例
with memo1.Lines do
begin
//对象大小以及每个数据成员的地址输出到Memo中
Add('Myclass对象大小:' + IntToStr(Obj.InstanceSize));
Add('Myclass对象所在地址 :' + IntToStr(Integer(Obj)));
Add('FMember1所在地址:' + IntToStr(Integer(@Obj.FMember1)));
Add('FMember2所在地址:' + IntToStr(Integer(@Obj.FMember2)));
Add('FMember3所在地址:' + IntToStr(Integer(@Obj.FMember3)));
Add('FMember4所在地址:' + IntToStr(Integer(@Obj.FMember4)));
end;
Obj.Free();
end;

procedure TForm1.Button2Click(Sender: TObject);

begin
with memo1.Lines do
begin
Add('窗体对象大小:' + IntToStr(form1.InstanceSize));
Add('窗体对象所在地址 :' + IntToStr(Integer(form1)));
Add('FMember5所在地址:' + IntToStr(Integer(@form1.FMember5)));
Add('FMember6所在地址:' + IntToStr(Integer(@form1.FMember6)));
Add('FMember7所在地址:' + IntToStr(Integer(@form1.FMember7)));
Add('FMember8所在地址:' + IntToStr(Integer(@form1.FMember8)));
end;
end;

end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值