引用是否占用内存空间?

反汇编看一下:

int n = 2;
int main(){
 int a = n;
 int & b = a;
 b = 3;
}

生成可执行文件,反汇编得到:



a.out:	file format Mach-O 64-bit x86-64

Disassembly of section __TEXT,__text:
__text:
100000f90:	55 	pushq	%rbp
100000f91:	48 89 e5 	movq	%rsp, %rbp
100000f94:	31 c0 	xorl	%eax, %eax
100000f96:	8b 0d 64 00 00 00 	movl	100(%rip), %ecx
100000f9c:	89 4d fc 	movl	%ecx, -4(%rbp)
100000f9f:	48 8d 55 fc 	leaq	-4(%rbp), %rdx
100000fa3:	48 89 55 f0 	movq	%rdx, -16(%rbp)
100000fa7:	48 8b 55 f0 	movq	-16(%rbp), %rdx
100000fab:	c7 02 03 00 00 00 	movl	$3, (%rdx)
100000fb1:	5d 	popq	%rbp
100000fb2:	c3 	retq

_main:
100000f90:	55 	pushq	%rbp
100000f91:	48 89 e5 	movq	%rsp, %rbp
100000f94:	31 c0 	xorl	%eax, %eax
100000f96:	8b 0d 64 00 00 00 	movl	100(%rip), %ecx
100000f9c:	89 4d fc 	movl	%ecx, -4(%rbp)        //变量a
100000f9f:	48 8d 55 fc 	leaq	-4(%rbp), %rdx
100000fa3:	48 89 55 f0 	movq	%rdx, -16(%rbp)//引用b,存储a的地址
100000fa7:	48 8b 55 f0 	movq	-16(%rbp), %rdx
100000fab:	c7 02 03 00 00 00 	movl	$3, (%rdx)
100000fb1:	5d 	popq	%rbp
100000fb2:	c3 	retq


结论:
从反汇编的结果看,编译器也为引用在栈中分配了空间,存储的是变量a的地址,且和指针变量一样占据8个字节。
通过引用改变变量a的值,编译器从引用获取变量a的地址进行修改。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值