c中的rvalues如何存储在内存中?

前端之家收集整理的这篇文章主要介绍了c中的rvalues如何存储在内存中?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
试图为他们学习左值,右值和内存分配.因此,有很多学习材料会有一些混乱.

rvalue是一个值,只需要在创建它的表达式的边界中存在(至少为C 11).所以它有一个占据的地址和内存块.但根据定义,我们无法获得rvalue的地址,因为与左值相比,它是一个临时对象.
但即使在C 11之前,我们也可以通过从函数返回并将其保存为const引用类型(呃,我猜不是地址而是值)来获取rvalue的地址.

那么,更确切地说,右值分配如何工作?程序或操作系统有多长时间真正记住了创建右值并将其标记为已分配的内存位置,而另一个对象无法取代它?

我怎么看,现在rvalues就像左值一样存储,但我们只是有其他权限来访问它们.并且它们具有其他类型的释放 – 对于超出范围的左值,对于右值,可以通过存在于表达式边界中或者直到没有更多链接来优化它们.

解决方法

简短回答:它依赖于实现.

这背后的主要原因是编译器始终可以自由地提高代码性能.理解这一点的一个更具体的方法是记住,一个值可以存储在cpu的寄存器中,而不是实际存在于您的内存中,这或多或少意味着该值没有地址.我不会打赌我所拥有的一切,但这可能是“我们无法得到一个rvalue的地址”的主要原因之一.

在更一般的方式中,因为rvalue在语义上是临时的,所以更可能被放置在临时位置或者以不能容易地映射到地址的方式进行优化,并且即使它可以在性能方面反作用.

猜你在找的C&C++相关文章