永发信息网

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

答案:4  悬赏:10  手机版
解决时间 2021-03-20 07:49
C语言中,函数调用是通过栈实现的,怎样理解这句话?
最佳答案
在一个函数中调用另一个函数,会将当前状态入栈,等执行完下一个后出栈,恢复状态继续往下执行
例:
int myfun()//假如指向到此函数
{
...
myfun1(); //调用myfun1函数,那我之前的变量怎么办?入栈保存,然后跳转到函数myfun1
....
}
int myfun1()
{
myfun2(); //又要调用新的怎么办,入栈保存现有变量,然后进入myfun2
}
int myfun2()
{
return 0; //运行完myfun2,终于返回了。然后回到myfun1,保存的变量出栈,继续执行myfun1
}
全部回答
这关系到内存的问题
首先内存分为五大部分,栈,堆,全局区,常量区,代码区,
函数的调用是在栈里进行的,首先函数压栈,然后栈里存储函数的局部变量等,进行运算,
等函数结束,函数出栈,就这样了
因为函数调用的时候,就要将关键的寄存器的值存入堆栈中,等到执行完之后又从堆栈中取出数据
,计算机底层,有cs和ip的指令指针,指向哪里就执行哪里的指令,但是函数调用会人为的把cs和ip改变, 从而改变了指令执行的位置,自然去执行调用的函数了,但是此时,还是要将关键的寄存器存入堆栈,比如cs,等到调用玩之后,就又从堆栈中取出关键的寄存器的值,cs,ip还有别的一些
尤其是递归函数
在一个函数中调用另一个函数,会将当前状态入栈,等执行完下一个后出栈,恢复状态继续往下执行
例:
int myfun()//假如指向到此函数
{
...
myfun1(); //调用myfun1函数,那我之前的变量怎么办?入栈保存,然后跳转到函数myfun1
....
}
int myfun1()
{
myfun2(); //又要调用新的怎么办,入栈保存现有变量,然后进入myfun2
}
int myfun2()
{
return 0; //运行完myfun2,终于返回了。然后回到myfun1,保存的变量出栈,继续执行myfun1
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
书院东巷地址有知道的么?有点事想过去
点P(-3,4)与点(a-1,b+2)关于y轴对称,
桃子膨大素有什么危害
美的偏旁是什么怎么读
静安十大装修公司排名有哪些?
我想2开一间小超市
姓周四个字的女孩名字 带雨的四个字名字
儿童乐园在商场怎样?选择商场来做,市场前景
佳商务地址在什么地方,想过去办事
划船这个动作真的科学吗
求大量描写笑容的词语和成语 5分
小学生三年级写作文的好文章
率土之滨张飞武将技能分析 张飞厉害吗
唱歌的比科学研的挣的钱多为什么?
睡觉时小腿抽筋是什么原因
推荐资讯
本科小自考是什么意思
做弱电工程的资料员可以朝哪个方向发展?
长沙汽车西站到长沙火车站312路凌晨有车吗?
湛江水电安装公司哪家好
建构主义教学
为什么那么想买东西呢
我想把我唱给你听杨幂歌曲下载
ppba是什么含义含硼量
忘仙交易账号,装备,银锭用什么手机游戏交易
奇丝妙剪专业美发连锁地址在哪,我要去那里办
基金定投一定会赚钱吗
风的唯美句子
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?