在object pascal中,对象占用空间是VMT+数据成员空间,
VMT指向虚方法入口,那么非虚方法的入口地址在那?如何察看?

解决方案 »

  1.   

    对象占用空间应该是
    VPTR+数据成员空间
    VPTR指向VMT,即虚方法表
    非虚方法同普通方法一样
    编译器在编译时地址就确定下来了
      

  2.   

    用SoftICE,WinASM等跟踪调试,反编译工具,或利用开发工具本身进行调试时就能看到!
      

  3.   

    也可以看啊
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TA = class
      private
        FA: Integer;
      public
        procedure SetA(I: Integer);
      end;  TMainForm = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    var
      MainForm: TMainForm;implementation{$R *.dfm}procedure TMainForm.FormCreate(Sender: TObject);
    beginend;{ TA }procedure TA.SetA(I: Integer);
    begin
      FA := I;
    end;
    procedure TMainForm.Button1Click(Sender: TObject);
    var
      A: TA;
    begin
       A := TA.Create;
       A.SetA(23);
       ShowMessage('TA.SetA的地址: $' + IntToHex(Integer(@TA.SetA), 8));
       A.Free;
    end;end.