引用在汇编层次上面的解释
ubuntu18(g++、gdb)
#include<iostream> #include<stdio.h> using namespace std; int main(){ int x = 1; int y = 2; int &b = x; return 0; }
编译带参数 -g
gdb ./程序名
break main
run
display/i $pc
相关结果如下:
7 int x = 1;
1: x/i $pc
=> 0x5555555547c1 <main()+23>: movl $0x1,-0x18(%rbp)
(gdb)
8 int y = 2;
1: x/i $pc
=> 0x5555555547c8 <main()+30>: movl $0x2,-0x14(%rbp)
(gdb)
9 int &b = x;
1: x/i $pc
=> 0x5555555547cf <main()+37>: lea -0x18(%rbp),%rax
(gdb)
10 return 0;
解释如下:(自己瞎猜的,好像是最新的g++生成的汇编代码和老版本的汇编代码不太一样了,也可能是我命令输入的和其他对方不一样)
=> 0x5555555547c1 <main()+23>: movl $0x1,-0x18(%rbp) 把 $0x1的值放入到地址 -0x18 中
=> 0x5555555547cf <main()+37>: lea -0x18(%rbp),%rax 把 地址 -0x18这个地址放到寄存器 rax 中
从汇编层次上来看,引用的确是通过指针来实现的
第二次测试:
命令如下:
g++ -g -c cite.cpp
objdump -S cite.o
int x = 1;
17: c7 45 ec 01 00 00 00 movl $0x1,-0x14(%rbp)
int &b = x;
1e: 48 8d 45 ec lea -0x14(%rbp),%rax
22: 48 89 45 f0 mov %rax,-0x10(%rbp)
参考:https://www.cnblogs.com/xkfz007/archive/2012/02/05/2338758.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2018-04-10 1015. Reversible Primes (20)