2009-08-28 9 views
0

私は(純粋に好奇心から)スタックに割り当てが行われたときに実際の参照のサイズを調べようとしました。CLR上の参照のサイズ

thisを読んだあと、私はまだ分かりません(これは値の型や型の定義のみに対応しています)。どこでも見つけられないようです。スタックに格納されるタイプAのオブジェクトがインスタンス化される今

class A 
{ 
    string a; 
} 

、文字列オブジェクトへの参照を次のように

だから、基本的にクラスを想像し、今何だろう上の割り当てのサイズスタックは?

免責事項:私は完全で全くのナンセンスを話している場合は私に知らせてください:)

答えて

4

ジャストポインタのサイズのように、おそらく、サイズはネイティブint型のものになります。32ビットは32に64ビットプラットフォームでは64ビット、64ビットプラットフォームでは64ビットです。

+0

ワウ、問題を過ぎて考える古典的な例:) – Stephanvs

+1

確かに正しいですが、一部の仮想マシンではパフォーマンス/キャッシュの理由で圧縮されたポインタが使用されています。 64ビットホットスポットJVMの32ビットCompressedOops – mikera

2

環境によっては、IntPtrのサイズが32または64ビットになります。

2

ここで、タイプAのオブジェクトがインスタンス化されると、文字列オブジェクトへの参照がスタックに格納されます。次に、スタック上の割り当てのサイズはどうなりますか?

文字参照は、Aが参照型であるため、実際にはスタックではなくヒープに格納されます。

+0

文字列への*参照*は、ヒープではなくスタックに格納されます。ただし、実際のオブジェクトインスタンス*自体はヒープに格納されます。 – Stephanvs

+2

いいえ、Aのすべてのインスタンス・メンバーは、ヒープ上のオブジェクト・データに格納されます(ストリング参照を含む)。 –

関連する問題