java - C,C++函数调用时入栈顺序 是编译时还是运行时完成的?
天蓬老师
天蓬老师 2017-04-18 10:48:16
0
3
826

我的理解是静态编译时,因为C语言是过程性语言只能静态联编不能动态联编,而C++编译于此类似,所以是编译时完全。不知道这样对不对?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信(3)
阿神

スタックにプッシュする順序はコンパイル時に決定されます。

関数呼び出しの前にスタックにプッシュする必要がある主なものは関数パラメーターであり、パラメーターはすべて固定されています (変数パラメーターはマクロによって決定される単なるオフセットです)。
関数を呼び出すためのコードはコードセグメントに配置され、スタックへのプッシュは命令の形式で行われるため、順序はコンパイル時に決定されます。

いいねを押す +0
阿神

@lianera は正しいです。スタックにプッシュする順序はコンパイル時に決定されます。

例を示しましょう:
次のようなコードがあります

リーリー

コンパイル後のアセンブリコードは次のようになります

リーリー

アセンブリを理解していなくても問題ありません。コンパイルの過程で、パラメータを渡す順序や、パラメータやローカル変数などをスタック上のどこに配置するか(相対位置)がすべて決まります。 。対応するプログラムを実行すると、コンパイルされた順序でスタックが動作します。

いいねを押す +0
Ty80

スタックへのプッシュは実行時にのみ発生するプロセスではないでしょうか?コンパイルは単にバイトコードに変換するプロセスです。なぜスタックにプッシュするのでしょうか?

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート