5

「stackalloc」キーワードが可変長を受け入れる理由は何ですか?

この命令がスタックのフレームに割り当てられたバッファへのポインタを返す場合、コンパイラはそれをどのように管理しますか? スタックフレームを整理するために呼び出されるたびに、実行時に関数を再コンパイルしますか?

ありがとう。

4

1 に答える 1

6

stackallocキーワードが可変長を受け入れる理由は何ですか?

それができることは便利で望ましいので、言語設計者はそれを許可することにしました。

この命令がスタックのフレームに割り当てられたバッファへのポインタを返す場合、コンパイラはそれをどのように管理しますか? スタックフレームを整理するために呼び出されるたびに、実行時に関数を再コンパイルしますか?

localalloc命令はスタック現在のフレームの後にメモリを割り当て、割り当てアドレスをローカルに戻すだけです。したがって、別のメソッドを呼び出しても上書きされないように、スタック フレームの末尾を更新する以外は、何も再計算する必要はありません。

(注: スタックについて議論するときはいつものように、これは実際には実装の詳細です。JIT は理論上、セマンティクスを尊重する限り、好きな場所から自由に割り当てることができます)

于 2016-05-14T21:06:40.257 に答える