首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JUMP和CALL的区别

JUMP和CALL的区别
EN

Stack Overflow用户
提问于 2009-02-07 09:52:19
回答 3查看 35.9K关注 0票数 25

JUMP和CALL指令有什么不同?它与更高级别的概念,如GOTO或过程调用有什么关系?(我的比较正确吗?)

我是这样想的:

JUMP或GOTO是将控件转移到另一个位置,并且控件不会自动返回到调用点。

另一方面,调用或过程/函数调用返回到调用点。由于它们本质上的差异,语言通常利用堆栈,堆栈帧被推送以“记住”每个调用的过程返回的位置。这种行为也适用于递归过程。在尾递归的情况下,不需要为每个调用“推入”一个堆栈帧。

我们将非常感谢您的回答和意见。

EN

回答 3

Stack Overflow用户

发布于 2009-02-07 10:05:13

关于跳跃和呼叫之间的区别,你是完全正确的。

在具有尾递归的单个函数的示例情况下,编译器可能能够重用现有的堆栈框架。但是,对于相互递归的函数,它可能会变得更加复杂:

代码语言:javascript
复制
void ping() { printf("ping\n"); pong(); }
void pong() { printf("pong\n"); ping(); }

考虑这样一种情况,其中ping()和pong()是接受不同数量参数的更复杂的函数。Mark Probst's paper非常详细地谈到了对GCC的尾递归实现。

票数 1
EN

Stack Overflow用户

发布于 2013-08-19 00:57:36

对你的想法的一个纠正:不仅是尾递归,而且通常是尾部调用,我们不需要堆栈帧,因此可以简单地在那里JMP (假设参数已经正确设置)。

票数 1
EN

Stack Overflow用户

发布于 2013-08-18 20:34:13

根据微处理器,首先检查条件,然后执行跳转操作(转到其他代码),并且不返回。调用操作类似于c语言中的函数调用,当函数被执行时,它返回以完成其执行。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/523540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档