左值与右值的根本区别在于能否获取内存地址,而能否赋值不是区分的依据
获取 区别 不是 赋值 区分 能否 根本 在于
2023-09-11 14:19:07 时间
1
左值指的是可以取地址的变量,记住,左值与右值的根本区别在于能否获取内存地址,而能否赋值不是区分的依据。通常临时量均为右值。
那么显然你所说的字面常量 2 是右值了。
2
临时变量(右值)生命周期
a) 临时对象应该在完整表达式结束时销毁
b) 常量左值引用会延长临时变量的生命
"a是不是比值2多了用了保存地址的内存? 占用内存上,a > 2,,对么?"
这是不对的。
a) 如果 a 是一个全局变量,因为带初始值,编译后会存放在目标文件的.data段中,在链接时所有目标文件的.data段会进行合并,此时决定全局变量的最终地址,当Loader载入你的程序时,a 变量对应的内存单元里就会被填充入2了。而你的2,有些编译器是用long类型来存的。
b) 如果 a 是局部变量,那么 2 可以直接写在指令里的,存放在.text段里,运行时由该指令把 2 填进局部变量 a 对应的地址里。(实际上是小的数存在指令里,大的数存在.data段中)
总而言之,程序中的字面常量的处理方法是与编译器、链接器的实现相关的。
作者:Acjx
链接:https://www.zhihu.com/question/26203703/answer/32841444
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章
- git 拉取和获取 pull 和 fetch 区别
- Kafka-处理请求(生产请求、获取请求)
- JS获取URL中参数,支持多参数传值传参,支持中文
- PHP 定时任务获取微信 access_token
- 反射获取Class对象
- 微信 小程序组件 滑动导航和获取元素实际高度
- document.body、document.documentElement和window获取视窗大小的区别
- SwiftUI手势之控制视图旋转 获取实时度数 实现360度旋转效果 (教程含源码)
- 如何获取STM32 MCU的唯一ID
- python 获取word文档页数
- C++获取站点的ip地址
- js获取字符串最后一位方法
- C#-枚举的key值获取枚举name名称-OK
- Jquery把获取到的input值转换成json
- iOS9 获取手机的唯一标识(一)——CFUUID、NSUUID、IDFA、IDFV、UDID、OpenUDID 的区别