考虑这种简单的情况:
I为我的通用操作系统(不是Windows)下载C ++编译器(例如
CLang
或其他任何内容)的预构建二进制文件。我编译我的代码,其中包括一些具有优化标志的计算昂贵的数学计算,并且执行时间为GCC
.。一次尝试,这次不是使用预构建的二进制文件,而是下载源代码并在通用机器上自己构建编译器。我用相同的优化标志编译了相同的代码,从而实现了执行时间
-O3
?
会或多或少会一样?
换句话说,执行时间是否独立于编译器的构建方式?
编译器对您的代码的优化是编译器的Behavior
的结果,而不是编译器的效果。
如果编译器具有相同的行为设计,它将产生完全相同的输出。从类似地,相同的编译器版本应生成相同的汇编代码给定相同的C ++代码输入。但是,某些事情可能会进一步影响运行编译器时正在执行的代码。 A发行版可能已经从其他版本中退出(甚至创建了自己的)补丁。 现代编译器通常具有图书馆的依赖(例如,cloog),它们可能在不同的版本中具有不同的行为,从而导致编译器基于其他数据基本上的其他数据做出代码生成决策。 这些库可能(在某些编译器版本中)在编译时是可选的(可能需要给出 - 启用开关以配置或配置尝试自动进行自动检测)。
compiler Switch像T1
说,即使是同一组装程序也可能在您的机器和他们的机器上执行不同的表现,例如因为一个针对AMD进行了优化,另一个是针对Intel的。
如果您的平台提供了特定的功能,可以提高程序的性能,编译器中的优化器might