繁体   English   中英

当我声明一个引用变量时,堆栈会发生什么? C ++

[英]What happen to stack when i declare a reference variable? C++

当我声明一个变量时,它将在堆栈中的某个内存索引处分配,对吗?

但是当我声明一个引用变量时,它将指向另一个变量的相同索引,因此不必在堆栈中分配新的空间。

C ++如何处理这种情况?

我的意思是说,它有一个包含名称和索引之间的关联的表?

编译器完成所有工作吗?

我希望清楚一点...如果有人有一些手册或相关内容,我将非常高兴!

谢谢所有人,如果我用不好的英语写的话,抱歉!

C ++标准未指定ABI,因此这是实现定义的。 但是通常的方法是将引用实现为指针,因此将指针分配在堆栈上。 但是,如果此引用未在任何地方传递,则可以对其进行优化,并仅用其指向的变量替换即可。

在典型的实现中,变量的分配取决于声明方式和声明位置。

通常,将在函数外部定义的变量放置在内存的一个区域中(堆栈或堆均无)。 常量可以放在其他区域或可执行文件中。

在函数内部定义的非static变量可以在堆栈上分配。 它们可以放在寄存器中而不是堆栈中。 取决于编译器和优化设置。 变量可以被“优化掉”,而不存在于最终的可执行文件中。

许多编译器将引用视为指针。 因此,当您通过引用传递变量时,编译器可能会通过指针传递。

C ++ 14 [dcl.ref] / 4说:

未确定参考是否需要存储

对于int a; int &b = a;这样的情况int a; int &b = a; int a; int &b = a; 实际上,编译器可能只是在编译时在其标识符表中存储了两个都引用相同地址的标识符。 此处可能不需要额外的运行时存储。 确实,C ++的规则说int b; int &a = b; int b; int &a = b; 结果完全一样。

当函数通过引用接受参数时:如果编译器无法通过函数调用进行优化,则可能会传递一个地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM