Jak*_*aka 2 x86 assembly visual-studio-2010 intrinsics
使用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
Run Code Online (Sandbox Code Playgroud)
如果我要写这个,我会用lock inc DWORD PTR [eax]
而不是mov
和xadd
是否有正当理由支持Microsoft xadd
并使用2条指令代替1条指令?
因为_InterlockedIncrement
还返回新值.
你无法做到这一点lock inc DWORD PTR [eax]
,因为现在找不到任何旧值和新值.除了在内存中,但是如果你进行其他读取,显然它不会是原子的(增量本身就是,但你可以得到一个与增量时发生的事情无关的值).
返回该值会_InterlockedIncrement
更有用.
归档时间: |
|
查看次数: |
749 次 |
最近记录: |