このトピックに関するさまざまな記事/ページを読んでいて、最終的にこの記事にたどり着き、混乱しました!
この記事ではValue Types always go where they were declared
、著者が意味したことは、値の型が宣言されている方法/場所に応じて、スタックまたはヒープのいずれかに存在する可能性があることです。
わかりやすくするために、コード スニペットを下に置いておきます。
public class Test
{
int testInt;
string testString;
}
int anInt;
string aString;
Test testObj;
testObj = new Test();
これらのコード行を実行すると、メモリ割り当ては次のようになります。
構造体はクラスtestInt
で宣言されているため、ヒープに格納されます。Test
この例を念頭に置いて、整数を宣言している場所の背後にある単純な Form.cs コードを見てみましょう。
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public int anotherInt;
}
}
私の混乱の部分:
この場合、どこにanotherInt
割り当てられますか?スタックまたはヒープ?見た目からして、「スタック」という回答がほとんどだと思います。しかし、この変数は というクラスで宣言されていませんForm1
か? では、上記の最初のコード スニペットのように、ヒープに移動するべきではありませんか? はいの場合、構造体がスタックに割り当てられるのはどのような状況ですか? メソッド内で宣言されている場合のみ?それでも、メソッドはクラスの下に来るのではないでしょうか?クラスはヒープに格納する必要があります。
知ってる疑問がいっぱい!しかし、何が起こっているのか知りたいだけです。私の質問が明確であることを願っています。