2009-04-06 3 views
1
私はバイト単位でオブジェクトのサイズ(デバッグとロギング用)を知りたい

の大きさなど、対象物の大きさが、好きではない バイトメンバー

Sizeof (Object) 

が、「深いはsizeof」のような

。たとえば、オブジェクトにハッシュマップまたはリストが含まれている場合、そのハッシュマップまたはリストに必要な実際のサイズを結果に追加する必要があります。

property Size : LongWord read GetByteSize; 

を各小さなオブジェクトに追加することなく、これを行う方法はありますか?おそらく

愚かな質問が、私はそれを試してみるよ;)

EDIT:ただ、ほぼ同じ質問が見つかりました:私は推測

Recursive Class Instance Size in Delphi

を、質問をすることができ閉まっている。それについて申し訳ありません!

+0

質問名にDelphiを追加することはお勧めできませんか? – bogdan

+0

これは何のためのタグなのですか...私は、タグとして、そしてすべての質問のタイトルにそれを含めるために、プログラミング言語を追加することは冗長であると考えています。おそらく味の問題。 – jpfollenius

答えて

1

残念ながら、このコードは自分で作成する必要があります。

本のわからないが動作しますが、あなたは非常に汚れることができます。

  • は、バイト単位のオブジェクトサイズを検索します。 TObject.InstanceSizeの使用。
  • 4バイトの各グループをポインタにキャストし、それがTObjectであるかどうかを確認します。あなたはそれをすることができるはずです。 TObjectの場合は、この手順を繰り返す必要があります。
+0

私はそれを恐れていました...私は避けたかった場所に変更を加えなければなりません...ダン* g * ...どうもありがとう! – jpfollenius

+0

可能な解決策を追加しましたが、それは非常に汚れています。 –

+1

ええ、それよりも難しいです。オブジェクトのように見える循環参照、インタフェース、データは考慮する必要がありますが、実際はそうではありません。私はあなたが成功するためには、この困難/不可能を見つけるだろうと思う。 –

0

これはデバッグ用ですから、FastMM4メモリアロケータを見ましたか?メモリリークを追跡するための素敵なものがあります。

+0

私はメモリリークを探していませんが、サイズが入力データによって異なるため、特定の内部データ構造のサイズについては探しています。 – jpfollenius