作为标题,当我们在++a
中编写C/C++
时,编译器似乎可以将其编译为:
inc dword ptr[i]
是原子的, 或者:
mov eax, dword ptr[i]
inc eax
mov dword ptr[i], eax
这不是原子的。
将它编译为非原子样式有什么好处吗?
答案 0 :(得分:9)
如果你的代码看起来像这样怎么办?
a
如果编译器使用第一个表示,它访问内存以递增1
,然后它再次访问内存以与eax
进行比较。在第二种情况下,它访问内存以获取值一次并将其放入eax
。然后,它只是将寄存器1
与new Vue({
el: '#app',
mounted:function(){
//use your select2 plugin in vue's mounted period
$(".asd").select2();
}
});
进行比较,这明显更快。
答案 1 :(得分:2)
首先,您似乎有一个非常特殊的处理器系列。并非所有指令都直接作用于记忆。
即使他们有,但是这种单一指令可能是一件非常复杂和昂贵的事情。如果你声称它真的是原子的,它必须停止所有其他的公共汽车转移。这会将计算速度降低到内存总线的速度。这通常比CPU慢。
答案 2 :(得分:0)
非原子变体将寄存器中的值结束,以备日后使用。