问题描述
我想知道cpu是否在运行时以相同的顺序执行操作指令,是否遵循优先使用的规则来评估表达式的值。
解决方法
有几件事需要澄清。编译器将C源代码“翻译”为机器代码。 C代码/指令和机器代码/指令之间从来没有一对一的关系。
编译代码时,唯一重要的是as if rule。只要保留程序的可观察行为,编译器就可以按任何顺序生成指令。
此外,在硬件级别上,CPU具有自己的机制来检测指令依赖性,并且自身可以无序或并行执行指令(例如,单个内核具有1个以上的ALU和{{3}) }。
因此,对于正确的C程序,将保留该程序可观察的行为。指令可以重新排序,部分代码被完全跳过,甚至其下面的算法也可以完全更改(例如,现代编译器可以使用循环结构将递归函数转换为非递归函数)。但是程序的可观察行为不会改变。