7

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

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

4

2 回答 2

6

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

于 2013-07-11T18:28:14.773 回答
6

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

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

看看这篇博客文章,它展示了这个包装器。它是开源的,适用于从 Delphi 5 到 XE4 的 Win32 和 Win64 平台。

于 2013-07-11T19:04:17.743 回答