C语言中,函数调用是通过栈实现的,怎样理解这句话?

能不能把过程详细的说下?

因为函数调用的时候,就要将关键的寄存器的值存入堆栈中,等到执行完之后又从堆栈中取出数据
,计算机底层,有cs和ip的指令指针,指向哪里就执行哪里的指令,但是函数调用会人为的把cs和ip改变, 从而改变了指令执行的位置,自然去执行调用的函数了,但是此时,还是要将关键的寄存器存入堆栈,比如cs,等到调用玩之后,就又从堆栈中取出关键的寄存器的值,cs,ip还有别的一些
尤其是递归函数
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-10-22
在一个函数中调用另一个函数,会将当前状态入栈,等执行完下一个后出栈,恢复状态继续往下执行
例:
int myfun()//假如指向到此函数
{
...
myfun1(); //调用myfun1函数,那我之前的变量怎么办?入栈保存,然后跳转到函数myfun1
....
}
int myfun1()
{
myfun2(); //又要调用新的怎么办,入栈保存现有变量,然后进入myfun2
}
int myfun2()
{
return 0; //运行完myfun2,终于返回了。然后回到myfun1,保存的变量出栈,继续执行myfun1
}
第2个回答  2013-11-27
这关系到内存的问题
首先内存分为五大部分,栈,堆,全局区,常量区,代码区,
函数的调用是在栈里进行的,首先函数压栈,然后栈里存储函数的局部变量等,进行运算,
等函数结束,函数出栈,就这样了
第3个回答  2013-11-27
在一个函数中调用另一个函数,会将当前状态入栈,等执行完下一个后出栈,恢复状态继续往下执行
例:
int myfun()//假如指向到此函数
{
...
myfun1(); //调用myfun1函数,那我之前的变量怎么办?入栈保存,然后跳转到函数myfun1
....
}
int myfun1()
{
myfun2(); //又要调用新的怎么办,入栈保存现有变量,然后进入myfun2
}
int myfun2()
{
return 0; //运行完myfun2,终于返回了。然后回到myfun1,保存的变量出栈,继续执行myfun1
}本回答被提问者和网友采纳
相似回答