我想知道CPU在运行时是否以相同的顺序执行操作指令,是否遵守用于计算表达式值的优先级规则。
有一些事情需要澄清。C源代码是"C";翻译的";编译器将其转换为机器代码。C代码/指令和机器代码/指令之间从来没有1比1的关系。
编译代码时,唯一重要的是"好像"规则。只要程序的可观察行为得到保留,编译器就可以按任何顺序生成指令。
此外,在硬件级别上,CPU有自己的检测指令依赖性的机制,并且它本身可以无序或并行地执行指令(例如,单个核具有多于1个ALU和FPU(。
因此,对于一个正确的C程序,程序的可观察行为将被保留。指令可以重新排序,部分代码可以完全跳过,甚至下面的算法也可以完全改变(例如,现代编译器可以将递归函数转换为具有循环结构的非递归函数(。但是程序的可观察行为不会改变。