运行时操作执行的优先级和顺序有区别吗?

Is there a difference between precedence and order of operation execution during the runtime?

我想知道 CPU 是否在运行时以相同的顺序执行操作指令,并遵守优先用于计算表达式值的规则。

有几件事需要澄清。 C 源代码由编译器“翻译”成机器代码。 C code/instructions 和机器 code/instructions.

之间从来没有一对一的关系

编译代码时唯一重要的是as if rule。只要保留程序的可观察行为,编译器就可以按任何顺序生成指令。

此外,在硬件层面,CPU有自己的指令依赖检测机制,本身可以乱序或并行执行指令(例如单核有超过1个ALU and FPU).

因此,对于正确的 C 程序,将保留程序的可观察行为。指令可以重新排序,部分代码可以完全跳过,甚至可以完全更改下面的算法(例如,现代编译器可以将递归函数转换为具有循环结构的 non-recursive 函数)。但是程序的可观察行为不会改变。