是否允许C++编译器发出编译同一程序的不同机器代码?

sha*_*oth 7 c++ compiler-construction compilation

考虑一下情况.我们有一些特定的C++编译器,一组特定的编译器设置和一个特定的C++程序.

我们使用该编译器和那些设置编译特定程序两次,每次都进行"清理编译".

如果发出的机器代码是相同的(我不是指时间戳和其他花里胡哨,我的意思是只会执行真正的代码),还是允许从一个编辑到另一个编辑不同?

Jer*_*fin 5

C++标准当然没有说什么来防止这种情况发生.然而,实际上,编译器通常是确定性的,因此给定相同的输入它将产生相同的输出.

真正的问题主要是它认为作为其输入的环境的哪些部分 - 有一些似乎假设构建机器的特征反映了目标的特征,并且基于隐含在"输入"中的"输入"改变它们的输出.构建环境而不是显式声明,例如通过编译器标志.也就是说,即使这是相对不寻常的.规范是输出依赖于显式输入(输入文件,命令行标志等)

  • 我会为非确定性编译器提供什么,它可以动态地发明优化. (3认同)
  • Visual Studio提供配置文件引导优化. (3认同)