C#:練習曲、パート4

続き、前の部分はこちら



そこで、今日はハンマーとシャベルを使用して、.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 当然、この限られたフレームワークでのみ機能します。他のオブジェクトを作成したり、ガベージを収集したりする必要がない最も単純なプログラムです。



ところで、フィールドを完全に削除しても、サイズは同じままで、追加フィールドのみがゼロになります。



All Articles