在object pascal中,对象占用空间是VMT+数据成员空间,
VMT指向虚方法入口,那么非虚方法的入口地址在那?如何察看?
VMT指向虚方法入口,那么非虚方法的入口地址在那?如何察看?
解决方案 »
- 如何取得服务器上做的RAID5 以后硬盘的ID?
- delphi打印控件
- Oracle insert into select的问题
- 想开店一直下不了决心
- 很奇怪的问题
- 读取视频文件的总长度,格式为 HH.MM.SS.FF (时,分,秒,帧)?
- indy组件的MD5签名值怎么跟C#不一样,求助了...数据长了就不一样了...
- 急!在windowsXP下无法连接dbf,但是在windows2000下可以,重分相谢!
- 在程序中用CreateOleObject('Excel.Application')往excel报表中写数据时出现oleerror?
- 新手求助:固定格式的大文本导入数据库,如何提高运行效率?多谢啦!
- 求救:查询时要生成一个字段作为某几个字段的和或平均值怎么做?
- paradox7.0建立索引后的问题??
VPTR+数据成员空间
VPTR指向VMT,即虚方法表
非虚方法同普通方法一样
编译器在编译时地址就确定下来了
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.