-3

重複の可能性:
.NET ローカル変数はどこに保存されますか?

function storeonstack()
{
 int a;
 int b;
 int c;
 a=1;
 b=1;
 a=2
 c=2;
}

これらの値の型がどのようにスタックに格納されているかを誰かが説明してくれますか?

4

2 に答える 2

3

実際には*、値型はメソッド内のローカル変数の場合はスタックに格納され、参照型のメンバーの場合はヒープに格納されます。ローカル変数がクロージャに含まれている場合は、ローカル変数もヒープに格納されることがあります。これは、関数が終了した後(およびスタックフレームがクリーンアップされた後)に変数が存続できるようにするために必要です。ローカル変数は、スタックにスピルバックされる前に、操作で使用されるときにレジスタに格納される場合もあります。JITの最適化によっては、ローカル変数がレジスターにのみ存在する場合と、まったく存在しない場合があります。ただし、メンバー変数は常に存在する必要があります。

*はい、技術的には、スタックやヒープなどが存在するという保証はありませんが、正直に言うと、すべてではないにしても、ほとんどの.NET実装には、Cプログラムのようにスタックとヒープがあります。

于 2013-01-18T03:16:30.977 に答える
0

これは実装の詳細であり、コンパイラに依存します。コンパイラによって異なる場合があります。

値型についての真実

スタックは実装の詳細です

于 2013-01-18T03:18:17.090 に答える