【发布时间】:2009-01-27 08:07:12
【问题描述】:
有没有办法在 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 个字节(4 个字节用于类开销,12 个字节来自 myOtherVar2,另外 4 个字节对于 myOtherVar1 整数)。由于 myOtherVar2 被解释为指针(4 字节)而不是类引用,因此使用 InstanceSize 将导致每个 12 字节。
有没有办法获得类的总大小,包括它对其他类实例的引用?
【问题讨论】:
-
好问题!每个人都使用 TObject,但没有人知道它实际占用了多少内存。