この質問に対する回答は見つかりません。スタックにプッシュされるデータのサイズは?スタックデータサイズ
スタック上のデータをプッシュするとしましょう。たとえば、int。スタックポインタの値が4バイト減少します。
今日まで私はスタックにプッシュできる最大のデータはポインタのサイズより大きくすることはできないと考えました。しかし、少し実験をしました。私はC#で簡単なアプリを書いた:それは8つのバイトを必要とするので、私は32ビットシステムに取り組んでいながら
int i = 0; //0x68 <-- address of variable
int j = 1; //0x64
ulong k = 2; //0x5C
int l = 3; //0x58
により、私の予測に、ULONGは、ヒープに割り当てされなければならない(ので、ポインタのサイズは4つのバイトです)。これは単純なローカル変数なので、非常に奇妙です。
しかし、スタックに押し込まれました。
私はスタックの考え方に間違っていると思います。我々は4バイト(intを押す場合)または8バイト(長いまたは2倍を押す場合)または1バイトだけ変更する必要がある場合、スタックポインタはどのようにスタック "知っている"だろうか?
ローカル変数の値はヒープ上にあるかもしれませんが、それらの変数のアドレスはスタックにあります。しかし、これは理にかなっていません。オブジェクトがどのように処理されるかということです。オブジェクトを作成すると(新しいキーワードを使用して)オブジェクトがヒープに割り当てられ、このオブジェクトのアドレスがスタックにプッシュされます。
誰かが実際にどのように私に教えてくれますか(記事へのリンクを付けることができますか)?
[いいえ](https://stackoverflow.com/a/3542372/17034)。 –