有没有办法在Delphi中获取类实例的实际大小?
我知道TObject类的InstanceSize方法,但该方法不会以递归方式为对象成员调用自身.例如,假设我们有两个类:
type MyClass1 = class private myVar1 : integer; myVar2 : integer; end; type MyClass2 = class private myOtherVar1 : integer; myOtherVar2 : MyClass1; end;
对于这段代码,MyClass1将是12个字节长度(每个整数4个字节加上4个类的开销)和MyClass2将是24个字节lengh(类开销为4个字节,myOtherVar2为12个字节,myOtherVar1为4个字节)整数).由于myOtherVar2被解释为指针(4个字节)而不是类引用,因此使用InstanceSize将为每个字节生成12个字节.
有没有办法获得类的总大小,包括它对其他类实例的引用?
构造一个MyClass1对象和一个百万MyClass2,使每个MyClass2指向相同的MyClass1.
每个MyClass2占用多少内存?12.000012字节?
循环列表需要多少内存?无限,因为你可以永远追逐指针?
在具有指针的语言中,一般的递归大小的算法是没有用的.您需要编写自己的算法,该算法包含有关特定于您如何使用对象的聚合/组合,共享和递归引用的知识.