汇编角度看指针和引用的区别
一、定义上来看:
引用是变量的别名,指针是指向变量的地址。
引用不可以为空但是指针可以为空,所以引用必须在定义的时候必须初始化并且初始化后不能被改变引用的对象,但是指针可以该变自己的指向。
引用必须引用有内存地址的量,如果是引用常量的话,必须使用常引用。(常引用的实现方法是编译器为常量开辟一个临时量的内存空间进行引用)
对引用和指针分别用SIZEOF求大小的话,引用的结果是所指向对像的大小,但是指针则永远是指针本身的大小。32位是4字节,64位下是8字节。
指针有多级,但是引用没有多级的说法。
二、从汇编角度来看:
定义一个引用和定义一个指针没有任何区别,都是用两行相同的汇编指令实现的。
第一行是把变量的地址复制到寄存器,第二行是把寄存器的地址复制到指针或者引用变量上。
所以从这个角度上看,引用的底层是用指针实现的,定义一个引用变量就是开辟一个指针大小的内存。
但是相对指针来说,引用更加有优势:从两方面来
看
1、使用方面:指针需要自己去解引用操作,但是在访问引用变量的地方会自动进行解引用。因为会自动进行解引用,所以不能通过区地址的方式获得引用变量的地址,但是我曾经用指针偏移的方法获得引用变量的地址。
2、函数的传参:指针传递地址的实质还是传递指针的拷贝,改变的还是指针拷贝的值,要改变指针本身的值需要多级指针。但是引用传递实质上传递的实参本身,改变引用就是改变实参本身。所以引用在函数参数传递的方面上比指针传递更加有效率,不需要拷贝操作。