我的理解是静态编译时,因为C语言是过程性语言只能静态联编不能动态联编,而C++编译于此类似,所以是编译时完全。不知道这样对不对?
阿神2017-04-18 10:50:16
スタックにプッシュする順序はコンパイル時に決定されます。
関数呼び出しの前にスタックにプッシュする必要がある主なものは関数パラメーターであり、パラメーターはすべて固定されています (変数パラメーターはマクロによって決定される単なるオフセットです)。
関数を呼び出すためのコードはコードセグメントに配置され、スタックへのプッシュは命令の形式で行われるため、順序はコンパイル時に決定されます。
阿神2017-04-18 10:50:16
@lianera は正しいです。スタックにプッシュする順序はコンパイル時に決定されます。
例を示しましょう:
次のようなコードがあります
コンパイル後のアセンブリコードは次のようになります
リーリーアセンブリを理解していなくても問題ありません。コンパイルの過程で、パラメータを渡す順序や、パラメータやローカル変数などをスタック上のどこに配置するか(相対位置)がすべて決まります。 。対応するプログラムを実行すると、コンパイルされた順序でスタックが動作します。
PHP中文网2017-04-18 10:50:16
スタックへのプッシュは実行時にのみ発生するプロセスではないでしょうか?コンパイルは単にバイトコードに変換するプロセスです。なぜスタックにプッシュするのでしょうか?