-
12-09-2019 - |
質問
いかりの責任は清掃のスタック
いと機能を楽しみきと言うようになります:
var = fun(int x, int y, float z, char x);
時 fun
まばれるようで、スタックのパラメータの機能を返しま担当の清掃のスタックでの機能で自己または"var"の開催を返します。
そしてもう一つ、誰でもできるのでは説明の概念を呼び出し規約?
解決
呼び出し規約 はたしていない清掃のスタック;呼び出し側は相手先.
呼び出し規約で異なる:
- パラメーター、および戻り値は、いくつか置(レジスタ;の電話 スタック;ミックスの両方)
- めるためにパラメータが渡された(または部品のシングル パラメータ)
- どのようにタスクの設定および清浄化の機能を呼び出しが分かれ との間で相手の相手先.
- を登録する直接の相手先ことがありま 含まれて
築いています 以上この呼び出します。
他のヒント
する答えを自分自身 呼び出し規約.
呼び出しコンベンションは同様の 契約.必然的に決まって以下のこと:
- 人によって担われているこの清掃活動のパラメータ。
- どのように、パラメータに渡されるという機能です。
- の返り値が格納されています。
多くの異なる呼び出し規約によって、プラットフォームとプログラミングの環境です。二つの共通の呼び出し規約のx86プラットフォーム:
stdcall
パラメータを渡しをスタックから右へ左折。の という 機能掃除のスタックです。
cdecl
パラメータを渡しをスタックから右へ左折。の 呼び出し 機能掃除のスタックです。
両方の場合、戻り値は、 EAX
登録(または ST0
浮動小数点値)
多くのプログラミング言語のx86プ指定する呼び出し規約は、例えば:
Delphi
function MyFunc(x: Integer): Integer; stdcall;
Microsoft C/C++
int __stdcall myFunc(int x)
一部の使用上の注意:
作成時のアントレプレナーシップで必要はほとんどない変更について知り、呼び出し規約がある典型的な場合に必要な懸念と自分を呼び出し規約:
- 呼び出し時に外部の図書館-文書Win32API例えば:ご利用対応の呼び出し規約その他のスタックかが壊れる可能性があります。
- 作成時にインラインアセンブラコード:いるレジスタがスタックス、観光に幅広くご利用いただけ変数です。
詳しくはお勧めしまれWikipedia記事:
は、その行が完了VARある時点で(楽しいから返された値を保持する)と楽しいが使用するスタック上の任意のメモリが消えてしまいます。「プッシュ」、すべての整頓を「ポップ」
。 コンパイラがその作業を行うことができますので、楽しみを整理し、すべて:呼び出し規約。これらのパラメータX、Y、Zを考えます。どのような順序彼らは(実際にそれらがスタック渡しのですか)スタックにプッシュされますか?呼び出し元と呼び出し先が同意している限り、問題ではありません!それは慣例です。