gpt4 book ai didi

c++ - 内联函数机制

转载 作者:太空宇宙 更新时间:2023-11-04 14:00:15 26 4
gpt4 key购买 nike

我知道内联函数不使用堆栈来复制参数,它只是在调用函数的任何地方替换函数体。

考虑这两个函数:

inline void add(int a) {
a++;
} // does nothing, a won't be changed
inline void add(int &a) {
a++;
} // changes the value of a

如果不使用堆栈来发送参数,编译器如何知道一个变量是否会被修改?替换这两个函数的调用后代码是什么样的?

最佳答案

是什么让您认为存在堆栈?即使有,是什么让您认为它会用于传递参数?

你必须明白有两个层次的推理:

  • 语言级别:定义应该发生的语义的地方
  • 机器级别:执行编码为 CPU 指令的语义

在语言级别,如果您通过非常量引用传递参数,它可能会被函数修改。语言层面不知道这个神秘的“栈”是什么。 注意:inline 关键字对函数调用是否内联几乎没有影响,它只是表示定义是内联的。

在机器层面......有很多方法可以实现这一点。进行函数调用时,您必须遵守调用约定。此约定定义了函数参数(和返回类型)在调用方和被调用方之间交换的方式,以及其中谁负责保存/恢复 CPU 寄存器。一般来说,因为它太低级了,所以这个约定会在每个 CPU 系列的基础上发生变化。

例如,在 x86 上,一些参数将直接在 CPU 寄存器中传递(如果它们适合),而其余参数(如果有)将在堆栈中传递。

关于c++ - 内联函数机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19618075/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com