如何获取动态数组的内存大小?

时间:2013-07-11 17:00:17

标签: delphi

在Delphi中,您可以使用sizeof()编译器魔术函数获取值类型的大小,但在引用类型上调用sizeof()将为您提供指针的大小,而不是值它正指向。

对于对象,您可以使用InstanceSize方法获取内存大小,但动态数组呢?由于填充,length(MyArray) * sizeof(element)可能不准确。那么,有没有准确的方法来获得动态数组的内存大小?

2 个答案:

答案 0 :(得分:6)

在动态数组的元素之间没有填充,Length(MyArray)*SizeOf(Element)应该是准确的。

答案 1 :(得分:5)

事实上,length(MyArray) * sizeof(element)对于数组内容是准确的,不包括任何内部动态数组或字符串。

如果您希望整个数组使用内存,包括嵌套引用类型内容大小,您可以使用我们的TDynArray包装器。它能够将任何动态数组序列化为二进制,包括引用计数成员(如动态数组或字符串)。您有SaveTo / SaveToStream方法用于此目的,并且您可以获得所有内容的实际大小。

看看at this blog article,它展示了这个包装器。它是开源的,在Win32和Win64平台上都可以从Delphi 5到XE4工作。