c++ 将引用赋值给引用_裸指针直接赋值和引用 效率对比

本文探讨了C++中引用赋值(如`auto &p_ptr2 = p;`)与直接赋值(如`auto p_ptr = p;`)在效率上的差异。通过反汇编解读,解释了`MOV`和`LEA`指令的区别,指出`LEA`仅计算地址而`MOV`则会实际读取内存内容。实验表明,编译器优化对于已使用对象的影响较小,但在未使用对象时,优化前后代码会有区别。
摘要由CSDN通过智能技术生成

问题:

观察如下代码:

	int a = 1;
	int *p = &a;
	auto p_ptr = p;//1
	auto &p_ptr2 = p;//2

上述代码中1处和2处操作,哪个效率更高呢?

反汇编解读:

	int a = 1;
00118178  mov         dword ptr [a],1  
	int *p = &a;
0011817F  lea         eax,[a]  
00118182  mov         dword ptr [p],eax  
	auto p_ptr = p;//1
00118185  mov         eax,dword ptr [p]  
00118188  mov         dword ptr [p_ptr],eax  
	auto &p_ptr2 = p;//2
0011818B  lea         eax,[p]  
0011818E  mov         dword ptr [p_ptr2],eax  

auto p_ptr = p;//1 此处在vs的反汇编中表示的是

(MOV在汇编语言中是 数据传送指令。)

00118185  mov         eax,dword ptr [p]   //将p放到寄存器当中
00118188  mov         dword ptr [p_ptr],eax //将寄存器中的数据传送给p_ptr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值