Visual Studio を_InterlockedIncrement
使用すると、次のマシン コードが生成されます。
; 40 : _InterlockedIncrement(&framecounter);
00078 b8 00 00 00 00 mov eax, OFFSET ?framecounter@@3JA ; framecounter
0007d b9 01 00 00 00 mov ecx, 1
00082 f0 0f c1 08 lock xadd DWORD PTR [eax], ecx
私がこれを書くなら、lock inc DWORD PTR [eax]
代わりにmov
andを使用しますxadd
xadd
Microsoftが 1 つではなく 2 つの命令を優先して使用する正当な理由はありますか?