以int类型为例 C++编译器为++i生成的代码是 013E1375 mov eax,dword ptr [i] 013E1378 add eax,1 013E137B mov dword ptr [i],eax 很简单,基本不用分析 第一行是把i的值放到eax中,然后调用add对eax进行+1,最后将eax再放到i中 再看看i++ 0119137E mov eax,dword ptr [i] 01191381 add eax,1 01191384 mov dword ptr [i],eax 结果是完全一样, 下面再看看有赋值的情况 int c = ++i; 012D1384 mov eax,dword ptr [i] 012D1387 add eax,1 012D138A mov dword ptr [i],eax 012D138D mov ecx,dword ptr [i] 012D1390 mov dword ptr [c],ecx 可以看到这个操作在完成了前三部之后做了两个mov把最终的i值放到了c中 再看看 int b = i++; 012D1375 mov eax,dword ptr [i] 012D1378 mov dword ptr [b],eax 012D137B mov ecx,dword ptr [i] 012D137E add ecx,1 012D1381 mov dword ptr [i],ecx 结果稍有不同,在把i的值mov到eax之后又立即把eax放到了b中,随后的三步保持与之前一致只不过寄存器换成了ecx,正好符合i++的特性
未来CTO关注我CTO之路从此开始微信号:wlaicto
时间: 2024-10-09 10:12:55