当前位置: 首页 > news >正文

4. 引用的本质

1. 引用的底层实现

引用,变量的别名,编译器底层直接用一个指针来实现。这里通过汇编来分析下:

在这里插入图片描述

我们根据汇编一步一步来分析:

  1. mov DWORD PTR [rbp-0xc],0xa:将 10 存入变量[rbp-0xc]的位置,数值上等于 rbp - 0xc。这里的 [rbp-0xc]就是变量 a。
  2. lea rax,[rbp-0xc]:将变量[rbp-0xc]也就是 a 的地址加载到 rax,数值上 rax = rbp - 0xc,也就是 rax = &a。
  3. mov QWORD PTR [rbp-0x8],rax:把地址存入到变量[rbp-0x8]中,也就相当于一个指针 p = [rbp-8],数值上 [rbp-8] = &a,也就是 int *p = &a
  4. mov rax,QWORD PTR [rbp-0x8]:从 [rbp-0x8] 取出地址到 rax,也就是 rax = &a。
  5. mov DWORD PTR [rax],0x8:写 0x8 到该地址 &a,也就是 a = 8。
汇编指令对应 C++ 语句说明 / 执行效果
mov DWORD PTR [rbp-0xc],0xaint a = 10;在栈上给 a 分配空间并存 10
lea rax,[rbp-0xc]&aa 的地址到寄存器 rax
mov QWORD PTR [rbp-0x8],raxint& ra = a;在栈上分配 ra 的位置,并存 a 的地址(引用底层实现)
mov rax,QWORD PTR [rbp-0x8]ra取出 ra(实际上是 a 的地址)到 rax
mov DWORD PTR [rax],0x8ra = 8;通过 rax(即 &a)写 8,最终 a 也被改为 8

2. 引用的存储空间

引用在 C++ 中的内部实现是一个 指针常量。因此引用所占用的空间大小与指针相同。(这里是 64 位机器,所以是 8)
在这里插入图片描述

http://www.dtcms.com/a/394602.html

相关文章:

  • 专业历史知识智能体系统设计与实现
  • 算法基础篇(4)枚举
  • 【C++】二叉搜索树及其模拟实现
  • 第二十一讲:C++异常
  • 2025年9月第2周AI资讯
  • 从 UNet 到 UCTransNet:一次分割项目中 BCE Loss 失效的踩坑记录
  • leetcode刷题记录2(java)
  • JAVA八股文——方法区
  • 链表操作与反转
  • AI编程 -- 学习笔记
  • 动态规划问题 -- 子数组模型(乘积最大数组)
  • 【AIGC】大模型面试高频考点18-大模型压力测试指标
  • Cannot find a valid baseurl for repo: base/7/x86_64
  • Lowpoly建模练习集
  • 六、kubernetes 1.29 之 Pod 控制器02
  • OpenCV:人脸检测,Haar 级联分类器原理
  • 类和对象 (上)
  • FreeRTOS 队列集(Queue Set)机制详解
  • 【论文速递】2025年第20周(May-11-17)(Robotics/Embodied AI/LLM)
  • 【秋招笔试】2025.09.21网易秋招笔试真题
  • C++ 之 【特殊类设计 与 类型转换】
  • 第14章 MySQL索引
  • Entities - 遍历与查询
  • TargetGroup 全面优化:从六个维度打造卓越用户体验
  • Proxy与Reflect
  • 浅解Letterbox算法
  • 【Triton 教程】triton_language.permute
  • JavaScript洗牌算法实践
  • 掌握timedatectl命令:Ubuntu 系统时间管理指南
  • 【RT Thread】RTT内核对象机制详解