関数がスタックに置かれるのはいつですか?
スタックには関数ではなくデータが含まれます。関数は再帰的に呼び出すことができるため、またはまったく呼び出すことができないため、関数にスペースを事前に割り当てることは意味がありません。
それらがコンパイルされると、各関数はスタックに置かれます。
これどこで読んだ?
そして、オブジェクトがそれを呼び出すと、
スレッドは、オブジェクトではなくコードを実行します。
スタック上のその関数に移動しますか?
それのようなものはありません。
最初に main 関数が stack にロードされ、
関数はスタックにロードされません。
オブジェクトは heap に割り当てられ、
おそらく、エスケープ解析を使用してスタックに割り当てることができます。
オブジェクトが関数を呼び出すと、オブジェクトはスタックに置かれます。
スレッドはメソッドを呼び出し、メソッドが呼び出されると、オプションでスタック フレームを割り当てることができます。そのスタック フレームには、ローカル変数とスタック割り当てオブジェクトを含めることができます。
スタック上のローカル変数にメモリを割り当てるたびに?
各メソッド呼び出しは、メモリを使用するすべてのローカル変数に対して単一のメモリ ブロックを割り当てることができます。注: 一部のローカル変数はレジスタに割り当てることができ、スタックを使用しない場合があります。
静的メソッドも同じ手順に従います。
非静的メソッドにはインスタンスの開始時に追加の引数があることを除いて、静的メソッドと非静的メソッドの間に実際の違いはありません。
通常の関数と同様に、メモリが一度だけ割り当てられると聞いたことがあります。
メソッドは呼び出しごとに 1 回だけ割り当てます。内部にローカル変数を含むループがあるとしますが、それでも一度しか割り当てられません。