调用函数和被调用函数之间的共享变量

Shared variables between calling and called functions

在C++实现的上下文中,调用函数时,与调用函数相关的共享变量的值存储在哪里?它们是存储在寄存器中还是存储在被调用函数的激活记录中?

#include <iostream>    
using namespace std;
int main() {
    int A, B, C, D = 2;
    C = sum(A, B);
    cout<<C<<D;
    return 0;
}
int sum(int NUMA, int NUMB); 
int sum(int NUMA, int NUMB) {
    int D;
    D = numA + numB;
    return D; 
} 

比如计算机如何区分这两个函数中的D?更重要的是,调用函数和被调用函数的共享变量是否存在单独的内存位置?

您的示例不在调用函数和它调用的函数之间共享数据:当您调用 sum(int,int) 时,copy AB 是在 sum 的激活记录中创建的,这意味着如果 sum 决定修改其 NUMANUMB 参数,则不会对ABmain() 函数内。

为了在调用函数和被调用函数之间共享数据,调用者需要将引用或指针传递给被调用函数*。发生这种情况时,指针或引用存储在被调用函数的激活记录中,但共享的数据存储在调用者的 space 中。

考虑这个例子:

void bar(int& x) {
    x = 321;
}
void foo() {
    int x = 123;
    bar(x);
}

foo()x 的内存在 foo()bar(int&) 之间共享,如下所示:

foo() 的激活记录拥有 x,而 bar(int&) 的激活记录拥有对 x 的引用。

* 存在其他共享数据的方式,例如使用全局变量和静态变量,或者在成员函数之间共享数据时将共享数据存储在实例对象中。我们不会在这里考虑它们,因为它们在广泛的参与者之间共享数据,而不是在两个功能之间共享数据。