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