问题:
观察如下代码:
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