そこで、今日はハンマーとシャベルを使用して、.NETの内部
単純なクラスがあります。 クラスX {public int Val; } このクラスのオブジェクトを作成する場合、実際のサイズはどのくらいですか? また、追加フィールドにはどのような値が含まれますか? 証明をC#コードとして提示します;)
もちろん、これはシリーズの最初の謎に過ぎませんが、少なくとも週末にはこれで十分でしょう。 .NETの内部を調べることは非常に大きなトピックです。
注:システムに依存することについて話しているので、コードは32ビットOSで実行されると仮定します。
UPD同様に、 lam0x86からiaroshenko.habrahabr.ru/blog/77275/#comment_2250121とcrjdからiaroshenko.habrahabr.ru/blog/77275/#comment_2252317の 2つの同様のソリューションが受信されました 。 最初にそれらを間違っていると分類しましたが、後で自分の間違いを見ました。
ただし、両方のソリューションは、クラスにオープン
int
フィールドがあるという事実に基づいています。 これがフィールドではなくプロパティである場合、またはフィールドやプロパティがまったくない場合、このソリューションは機能しません。
したがって、私は「著者のバージョン」をデモンストレーションすることにしました: iaroshenko.habrahabr.ru/blog/77275/#comment_2269072 当然、この限られたフレームワークでのみ機能します。他のオブジェクトを作成したり、ガベージを収集したりする必要がない最も単純なプログラムです。
ところで、フィールドを完全に削除しても、サイズは同じままで、追加フィールドのみがゼロになります。