如题,当我们在C/C++
中编写++a
时,编译器似乎可能将其编译为:
inc dword ptr[i]
这是原子的, 或者:
mov eax, dword ptr[i]
inc eax
mov dword ptr[i], eax
这不是原子的。
将其编译为非原子样式有什么好处吗?
最佳答案
如果您的代码看起来像这样怎么办?
++a;
if (a > 1) {
...
}
如果编译器使用第一种表示,它会访问内存以递增a
,然后再次访问内存以与1
进行比较。在第二种情况下,它访问内存一次获取值并将其放入eax
。然后它简单地将寄存器 eax
与 1
进行比较,这明显更快。
关于c++ - 为什么 C/C++ 编译器并不总是使++ 成为原子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48247420/