7

Delphi では、sizeof()コンパイラのマジック関数を使用して値型のサイズを取得できますがsizeof()、参照型を呼び出すと、ポインタが指している値ではなく、ポインタのサイズが得られます。

オブジェクトの場合はInstanceSizeメソッドでメモリサイズを取得できますが、動的配列の場合はどうでしょうか。パディングのため、length(MyArray) * sizeof(element)正確でない場合があります。それで、動的配列のメモリサイズを取得する正確な方法はありますか?

4

2 に答える 2

6

実際、内部の動的配列または文字列を除くlength(MyArray) * sizeof(element)配列の内容については正確です。

ネストされた参照型 content size を含む配列全体でメモリを使用したい場合は、TDynArrayラッパーを使用できます。参照カウント メンバー (動的配列や文字列など) を含む任意の動的配列をバイナリにシリアル化できます。この目的のためにSaveTo/SaveToStreamメソッドがあり、すべてのコンテンツの実際のサイズを取得できます。

このラッパーを紹介するこのブログ記事をご覧ください。これはオープン ソースであり、Delphi 5 から XE4 まで、Win32 および Win64 プラットフォームの両方で動作します。

于 2013-07-11T19:04:17.743 に答える
6

動的配列の要素間にパディングはなく、Length(MyArray)*SizeOf(Element)正確である必要があります。

于 2013-07-11T18:28:14.773 に答える