函數調用的過程?

int main(void)
{
  ...
  d = fun(a, b, c);
  cout<<d<<endl;
  ...
  return 0;
}

調用fun()的過程大致如下:
main()========
1).參數拷貝(壓棧),注意順序是從右到左,即c-b-a;
2).保存d = fun(a, b, c)的下一條指令,即cout<<d<<endl(實際上是這條語句對應的彙編指令的起始位置);
3).跳轉到fun()函數,注意,到目前爲止,這些都是在main()中進行的;
fun()=====
4).移動ebp、esp形成新的棧幀結構;
5).壓棧(push)形成臨時變量並執行相關操作;
6).return一個值;
7).出棧(pop);
8).恢復main函數的棧幀結構;
9).返回main函數;
main()========

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章