Delphi对象如何在代码中工作
我一直在看system.pas Delphi可以从windows调用多达65000个内存块 当Delphi生成一个对象时,它会调用一个内存块来获取它的数据 如果是这样的话,类如何加载一个寄存器,其中包含该内存块的内存地址,以及另一个寄存器中放置的方法的地址。 有人知道这件事吗 莱克斯·迪恩Delphi对象如何在代码中工作,delphi,Delphi,我一直在看system.pas Delphi可以从windows调用多达65000个内存块 当Delphi生成一个对象时,它会调用一个内存块来获取它的数据 如果是这样的话,类如何加载一个寄存器,其中包含该内存块的内存地址,以及另一个寄存器中放置的方法的地址。 有人知道这件事吗 莱克斯·迪恩 使用GetMem,您可以从windows调用内存块,windows在4G空间内为每个进程分配多达65000个内存块。根据fag的不同,这取决于调整块大小时是否移动块,以及在“调整大小”或“修复”和其他问题中
使用GetMem,您可以从windows调用内存块,windows在4G空间内为每个进程分配多达65000个内存块。根据fag的不同,这取决于调整块大小时是否移动块,以及在“调整大小”或“修复”和其他问题中重新定位的数据。 阅读有关Windows的信息,或转到Windows.pas并搜索内存,然后调用您的Delphi帮助 在system.pas中有很多有趣的事情,比如1/_ObjectProcess,似乎是为了给delphi程序员增加困惑。为什么他们不把代码放在TObject中呢。2/以及代码如何测量对象的尺寸 您的“65000内存块”统计数据来自哪里 创建类实例时,在执行该类的
Create
方法之前,将调用以下类方法(从\u ClassCreate
全局函数,该函数确保只为所有Create嵌套调用创建一次实例):
调用GetMem
从堆中获取内存,然后使用以下方法:
class function TObject.InitInstance(Instance: Pointer): TObject;
此InitInstance
方法将:
var O: TObject;
begin
O := TObject.Create;
writeln('O memory address is ',pointer(O));
O.Free;
end;
在Delphi2010及其增强RTTI之前,您无法访问对象的所有方法和字段。代码只能访问已发布的属性和方法。但您必须使用RTTI。请参阅TypInfo.pas unit。看看这篇关于Delphi创建新类实例时发生了什么的精彩解释: 虽然最初的文章出现在1998年,但对于较新的Delphi版本,大部分内容仍然是正确的。
以下是德尔福杂志的原始文章:没有给出理由(如评论)的否决投票是没有帮助的。莱克斯,你为什么要为每个问题创建一个新的帐户?如果堆栈溢出的某些方面您不了解如何使用。
var O: TObject;
begin
O := TObject.Create;
writeln('O memory address is ',pointer(O));
O.Free;
end;