Lou*_*uis 5 c c++ compiler-construction atomic
作为标题,当我们写入++a时C/C++,似乎编译器可以将其编译为:
inc dword ptr[i]
Run Code Online (Sandbox Code Playgroud)
这是原子的,或者:
mov eax, dword ptr[i]
inc eax
mov dword ptr[i], eax
Run Code Online (Sandbox Code Playgroud)
这不是原子的.
将它编译为非原子样式有什么好处吗?
如果您的代码看起来像这样怎么办?
++a;
if (a > 1) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果编译器使用第一个表示,它访问内存以递增a,然后它再次访问内存以进行比较1.在第二种情况下,它访问内存以获取值一次并将其放入eax.然后,它只是寄存器比较eax反对1,这是显著更快.