什么是呼叫说明
What are Call Instructions
我目前正在阅读"编程:使用C++的原则和实践",作者提到在类定义中编写成员函数的定义可以使函数内联。我不完全确定这意味着什么,所以我在 https://www.geeksforgeeks.org/inline-functions-cpp/上寻找更具体的理解。我似乎无法理解这句话的上下文中的"指令"是什么意思:
当程序执行函数调用指令时,CPU 在函数调用之后存储指令的内存地址。
我用谷歌搜索了一下,看起来调用指令只是传递程序的另一部分或其他应用程序的控制权。如果这就是他们的意思,他们不应该说"CPU存储函数调用的调用指令的内存地址"吗?
这个问题可能听起来很奇怪或吹毛求疵,但我是CS的新手,真的很想对CS有一个扎实的了解。
它们实际上意味着存储函数调用后指令的内存地址。这是因为指令在机器代码级别的工作方式。函数调用完成后,程序需要一种方法来返回到原来的位置。它通过跳转指令到存储的内存地址来实现这一点,这会导致执行跳转到该指令。如果内存地址指向函数调用,它将永远循环。
首先,您链接到的页面正在讨论特定类别系统上的行为。它不是在描述标准C++。
该页面讨论的是汇编语言中可能由C++编译器生成的情况。"函数调用指令"是指执行函数调用的汇编语言(或机器码(指令。 在x86语法中,该指令call
。例。
您可以通过搜索"x86 调用指令"或类似术语来查找有关此内容的更多信息。
被存储的地址,通常称为返回地址,是call
之后下一条指令的地址。当函数的执行到达ret
程序集指令时,执行将跳转到返回地址。
不,它所说的(这是x86芯片特有的,其他人可能会以不同的方式做(是CPU在调用之后存储指令的地址(在堆栈的顶部(,然后跳转到作为调用指令的操作数的地址。当被调用的函数执行"ret"指令时,存储的地址被读取,执行跳转到该点。
当执行 x86 CALL 指令时,程序计数器的内容(即 CALL之后的指令地址(存储在堆栈中,程序控件被转移到子例程中。
(x86 的程序计数器寄存器 (IP/EIP/RIP( 通常不能直接访问,但它被定义为在当前指令正在执行时指向下一条指令。
在完成子例程的执行后,执行RET指令,该指令将堆栈内容(即CALL指令之后的指令地址(加载回程序计数器。
因此,在调用方的指令中恢复执行call
- 呼叫运营商<<临时
- 当使用通配符和null指针调用函数时,对输出的说明
- 关于C++中具有多重继承"this"指针的说明
- 16 位到 10 位转换代码说明
- C++ 基本 CTOR 说明 - 为什么不调用赋值/复制构造函数
- 编译器指出结构和 int 说明的错误 2059
- 随机数生成函数说明
- 赋值到类型和空大括号. 语法说明
- C++ switch 语句:对案例进行分组,并针对每个案例给出特定的说明
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- std::extent 实现详细信息说明
- 您好,我实际上想了解以下代码.有人可以详细说明代码它到底在做什么吗?为什么它会在第 31 行崩溃
- 如何理解"Temporary objs are destroyed as the last step in evaluating the full-expression"?谁能用一些简单的例子来说明这
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 有没有办法在c ++中清除空数组,请检查下面的代码以获取说明
- 使用英特尔内部函数 (AVX) 中的混合说明
- 呼叫 QSound,它们之间有延迟 Qt C++
- 复印作业操作员说明
- 什么是呼叫说明
- 关于呼叫srand的说明