linux系统下,使用g++ a.out -S 生成编译后的汇编语言下的代码文件
结论:使用指针和引用并无区别
个人理解:引用就是同一地址/指针的第二声明,也就是别名
提示:因为本人并未系统学习过汇编语言,所以只分析引用和指针使用下的相关部分
首先引入几个重要技术名词,
栈顶寄存器、sp寄存器、汇编代码为rsp:属于cpu的八大寄存器,众所周知,进程是程序在内存中的映射,而sp寄存器就是记录了进程进行到栈中的哪一块内存,使用内存顺序为自上而下
基准寄存器,汇编代码为rbp:同属于cpu八大寄存器,功能为记录当前内存位置,比如函数运行结束后回到rbp记录位置
临时寄存器,rax:八大,功能为临时开辟内存
返回值寄存器,eax:八大,功能为存放返回值
mov:移动内存位置
lea:读取内存地址到寄存器,因为内存不能同时存取,所以往往需要分两步,先读取到rax寄存器,再由寄存器存入到内存中
():括号表示访问该寄存器的内存
过程对比:
创建指针b将变量a的地址存入其中,此时发生了rax寄存器读入a的地址,然后寄存器将它存入一块内存中
声明b为a的引用,产生了汇编代码和上述一样