Do C 参考需要任何内存

Do C++ references take any memory?

本文关键字:任何 内存 参考 Do      更新时间:2023-10-16

可能的重复:
C 中的参考变量大小

C 参考是否会消耗任何内存?如果没有,如何将它们作为参数传递给函数?

有时他们会这样做,有时没有。当他们需要(例如用作数据成员时)时,他们会这样做。

以示例他们不需要:

int a = 1;
int &b = a;

现在,编译器可以将b视为a的别名。从来没有需要在此处分配b的内存,因为参考不是对象。

另一种可能引起的案例:

int some_function_call(); // function returns by value
const int &c = some_function_call();

在这种情况下,c是对呼叫的返回值的临时对象的引用。临时性的寿命扩展到c的范围,因此从某种意义上说,您可以说c消耗了一块插件的内存。但是,没有特别的理由要求编译器分配更多的东西。您可能会看到与编写const int c = some_function_call();相同的发射代码,该代码还可以创建一个具有相同寿命和同名cint对象。

至于将它们作为参数传递 - 这取决于参数是否占据内存。一些参数可能会通过寄存器传递。然后,这取决于Callee代码,该寄存器是否最终会在执行功能期间溢出到某个地方。但是,是的,当通过参数传递和函数调用未夹住时,参考参数必须占据"某物",因为呼叫者必须以某种方式让callee知道引用所指的对象的地址(" referand")。p>如果您不接受指针的地址,则可以说所有相同的话。但是,就指针而言,这是对编译器自己的主动性的优化。在参考的情况下,它们在标准中明确定义为别名,而在编译器无法将参考视为纯粹作为条目的情况下,指针(或任何比率地址)恰好是实施该指示的一种明显手段在其编译时名称查找表中。唯一的本质区别是标准所描述的抽象计算机中发生的情况 - 实施和优化之后,它可能构成同一件事。