本文参考:
https://www.cnblogs.com/ronny/p/3662556.html
定义:
引用就是一个对象的别名
引用不是值不占内存空间
引用必须在定义时赋值,将变量与引用绑定
本质:
引用实质上是通过指针实现的
引用是一个常量指针
引用在内存中占4个字节
在对引用定义时,需要对这个常量指针初始化
汇编层面分析:
我们从最简单的变量的定义开始,看编译器会做哪些事情。
int var = 42;
mov dword ptr [var],2Ah // 对应汇编代码
上面语句申请了一块内存空间,占4个字节,存放了一个int型的变量。内存里放的是42的二进制码。
汇编代码向我们表达的意思就是把42写入以var为地址的内容区域。var有点像我们理解上的指针,只是编译器并没有把它抽象出来,而是让我们更表象的理解:申请一个变量,它的值为42。
那么var这个变量名放在哪呢?
我们知道程序如果访问内存里的数据,需要通过地址来进行访问,所以上面的代码在经过编译器生成目标代码时,用存放42的地址了所有的var,所以结论时,目标文件中不存在var,所以变量名本身是不占内存的。
而我们知道,引用是变量的一个别名。那么,从这很多人会联想到,引用会不会也只是一个名字而已,编译器在生成目标代码的时候,会用实际地址替换引用呢?事实不是。
1 int var = 42;
2 01303AC8 mov dword ptr