【问题标题】:Byte size of object including size of members对象的字节大小,包括成员的大小
【发布时间】:2009-04-06 12:53:23
【问题描述】:

我想知道(用于调试和记录)对象的大小(以字节为单位),但不喜欢

Sizeof (Object)

但就像一个“深尺寸”。例如,如果对象包含哈希映射或列表,则该哈希映射或列表所需的实际大小应添加到结果中。有什么方法可以做到这一点而不必添加一个

property Size : LongWord read GetByteSize;

对每一个小物件?

可能是一个愚蠢的问题,但我会试一试;)

编辑:刚刚发现几乎相同的问题:

Recursive Class Instance Size in Delphi

我想,这个问题可以结束了。很抱歉!

【问题讨论】:

  • 在问题名称中添加 Delphi 不是一个好主意吗?
  • 这就是标签的用途......我认为将编程语言添加为标签并将其包含在每个问题的标题中都是多余的。可能是口味问题。
  • 好问题!每个人都使用 TObject,但没有人知道它实际占用了多少内存。

标签: delphi delphi-2009 sizeof


【解决方案1】:

很遗憾,您需要自己编写代码。

不确定这是否有效,但你可能会变得非常肮脏:

  • 以字节为单位查找对象大小。使用 TObject.InstanceSize。
  • 将每组 4 个字节转换为一个指针,然后检查它是否是一个 TObject。你应该能够做到这一点。如果是 TObject,则应重复该步骤。

【讨论】:

  • 我很害怕...我必须在我想避免的地方进行更改...该死的g...无论如何谢谢!跨度>
  • 添加了一个可能的解决方案,但它很脏,我不确定你是否可以这样做。
  • 嗯,比这更难。您必须考虑循环引用、接口和看起来像对象但实际上并非如此的数据。我认为您会发现这很难/不可能成功执行。
  • 抱歉,错过了您的评论,克雷格。考虑到所有潜在的问题,听起来不值得付出努力。也许我会试一试......
  • 如何区分 32 位整数和 32 位 TObject 指针?素数数组不会包含任何您会误认为指针的整数,但其他任何东西都可能包含。或者你可能会得到一个指向某个字节缓冲区的原始指针。
【解决方案2】:

既然是调试用的,那你看过FastMM4内存分配器了吗?它有一些用于跟踪内存泄漏的好东西。

【讨论】:

  • 我不是在寻找内存泄漏,而是在寻找某些内部数据结构的大小,因为大小随输入数据而变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 2021-02-18
  • 2011-09-20
  • 2013-05-28
  • 2022-01-23
  • 2014-01-27
  • 2013-04-28
相关资源
最近更新 更多