如题所述
第1个回答 2018-03-21
编译器不仅是无序的,而且还展开、合并、删除代码(如果没有发现代码),,,C语言是好的,和C++编译器编译,经常连上帝也不知道结果。
暂停现代CPU为了弥补CPU和内存之间的速度差距的接入方案,以所谓的缓存(L1,L2,L3;在CPU芯片的速度比内存快得多,但容量很小),CPU缓存中常见的事情似乎保持镜子,需要在缓存中直接读取使用的数据是好的,比内存快几倍的速度。
内存引起的停顿:众所周知,内存的速度低于处理器的速度。因此,当CPU想从内存中读取或写入数据时,内存会说:“我还没有准备好!”(发送CPU信号,CPU没有完成)什么都没有,甚至连CD都充满蓝色也熄灭了技巧。所以只能暂停(相当于没有插入操作指令)等等。
这里你需要给出一个概念,就是在执行阶段(第三级)中的分支指令,以获得目标地址是否跳转和跳转,而(指令地址感)下一个指令已经处于解码阶段,下一个指令只是发出指令代码。根据我的习惯,compilting(大多数人),下一个指令是不跳分支指令。跳转分支的指令是另一个遥远的地方。但如果只是在跳跃的时候…这两个时钟周期被浪费了。那怎么回事?…这两个指令是无效的(相当于NOP指令),再由跳转目标地址(这就是所谓的“刷”是也)。
注意名字的区别。名称风险是两个没有数据流的指令,数据冒险是两个指令之间的数据流。