Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 对象的字节大小,包括成员大小_Delphi_Delphi 2009_Sizeof - Fatal编程技术网

Delphi 对象的字节大小,包括成员大小

Delphi 对象的字节大小,包括成员大小,delphi,delphi-2009,sizeof,Delphi,Delphi 2009,Sizeof,我想知道(用于调试和记录)一个对象的大小(以字节为单位),但不像 Sizeof (Object) 但就像一个“深尺寸”。例如,如果对象包含哈希映射或列表,则应将该哈希映射或列表所需的实际大小添加到结果中。有没有什么方法可以做到这一点而不必添加 property Size : LongWord read GetByteSize; 每一个小东西 可能是个愚蠢的问题,但我会试一试;) 编辑:刚刚发现几乎相同的问题: 我想,这个问题可以结束了。对不起 不幸的是,您需要自己为此编写代码 不确定这是否

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

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

property Size : LongWord read GetByteSize;
每一个小东西

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

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


我想,这个问题可以结束了。对不起

不幸的是,您需要自己为此编写代码

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

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

由于这是为了调试,您看过FastMM4内存分配器了吗?它有一些很好的跟踪内存泄漏的东西。

我很害怕……我必须在所有我想要避免的地方进行更改……该死的g……无论如何,谢谢!添加了一个可能的解决方案,但它非常脏,我不确定你是否能做到。嗯,比这更难。您必须考虑循环引用、接口和看起来像对象的数据,但事实上不是这样。我想你会发现这很难/不可能成功完成。对不起,没有听到你的评论,克雷格。考虑到所有潜在的问题,似乎不值得这么做。也许我会尝试一下……你如何区分32位整数和32位TObject指针?素数数组不会包含任何您会误认为是指针的整数,但其他任何整数都可能包含。或者,您可能会得到一些字节缓冲区的原始指针。我不是在寻找内存泄漏,而是因为某些内部数据结构的大小,因为大小随输入数据而变化。在Delphi中添加Delphi不是一个好主意吗?这就是标签所用的……我认为将编程语言添加到标签中是多余的。把它包括在每个问题的标题中。可能是口味的问题。好问题!每个人都使用TObject,但没有人知道它实际需要多少内存。