2017-09-11 8 views
-1

変数にメモリを割り当て?は、私は次のコード行を有するC#の

各変数にどれだけのメモリが割り当てられますか?

+1

実際の変数は、参照のためすべて同じサイズです。また、ヒープ内の実際のオブジェクトも同じサイズになります(文字列は、このオブジェクトが参照2を持つ別個のオブジェクトになります)。もちろん、 'a'は' null 'なので実際には参照されません。 https://stackoverflow.com/questions/3800882/how-big-is-an-object-reference-in-net – juharr

+0

ヒープ上にあるものとスタック上のものは、実際にはフレームワーク実装の詳細です。文字列のインターンはそのままです。そして、JiT Compilingは使用されず、デッドコードなので、ただ消えるかもしれません。 So:実行可能なランタイムに応じて、可能な最大値と最小値の間の値。より大きな問題は、なぜあなたは尋ねるのですか?どのようなマイクロ最適化や欠陥パスがありますか? – Christopher

答えて

0

bとcをインスタンス化すると、メモリが自動的に割り当てられます。自分で処理する必要はありません。あなたはその部分を忘れることができます。それは管理された魔法の部分です。ガベージコレクタは、これらのオブジェクトがもう必要なくなったら(そのポインタはありません...)、メモリスペースを解放します。それでも、同じタイプなので、bとcは同じメモリサイズになります。まだ初期化されていないので、スペースは必要ありません。

+0

'a'は実際の変数のためにスタック内のスペースをとりますが、ヒープ内のものは参照しません。 – juharr

+0

C#コンパイラとJITは通常、未使用の変数を取り除いて削除し、メモリを割り当てません。 – KitAndKat

+0

これはちょうどコードスニペットなので、 'a'を設定して' a'を設定することができます。その場合は最適化できませんが、 'a'がコンパイルされているかのようにコンパイルされる可能性があります。 – juharr

関連する問題