乱序并不是在汇编代码指令那个粒度来“乱序”。 (虽然逻辑上编译器/汇编器?可以有限调整一些不相关指令的顺序,比如 add a, b ; add c, d这种)
CPU的乱序是在微码那个粒度来 乱序的。具体的搞法是译码之后交到后端的乱序执行器去执行。此时一个前面的汇编指令可能变成一坨后端的微指令,而且寄存器也都是在寄存器池里面四处tag的。CPU乱序执行能够保证微码在进入后端,以及从后端retire的时候顺序一致。
至于你说的多线程共享全局变量这个,跟乱序关系不是非常大,主要是缓存一致性协议来保证的。
【 在 wjhtingerx 的大作中提到: 】
: 如果多线程共享全局变量之类的场景,指令乱序执行怎么确保运行正确呢?
--
FROM 98.42.117.*