gpt4 book ai didi

delphi - Delphi 中的递归类实例大小

转载 作者:行者123 更新时间:2023-12-03 15:15:17 31 4
gpt4 key购买 nike

有没有办法在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 整数)。使用 InstanceSize 将导致每个实例占用 12 个字节,因为 myOtherVar2 被解释为指针(4 个字节)而不是类引用。

有没有办法获取类的总大小,包括它对其他类实例的引用?

最佳答案

构造一个 MyClass1 对象和一百万个 MyClass2,使得每个 MyClass2 都指向同一个 MyClass1。

每个 MyClass2 占用多少内存? 12.000012 字节?

循环列表需要多少内存?无穷大,因为您可以永远追逐指针?

在带有指针的语言中,简单的递归大小算法通常没有用处。您需要编写自己的算法,其中包含有关特定于您如何使用对象的聚合/组合、共享和递归引用的知识。

关于delphi - Delphi 中的递归类实例大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/482604/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com