【发布时间】:2014-07-25 22:03:14
【问题描述】:
据this文章/视频:
GCC 识别出几个依赖于架构的优化 提高 C 可执行文件的速度。传递可执行文件 GCC 的第二次通常可以提供戏剧性的表现 改进。
如果您观看了链接上的视频,您会发现这种方法使可执行文件的速度提高了一倍。我不确定这是不是一般情况。
我的问题是:为什么会这样?
奖励:当我们准确地重新编译已编译的程序时会发生什么?
【问题讨论】:
-
那一定是个骗局。看看代码如何包含
sleep(10)?这是一个系统调用,使进程休眠十秒钟。为什么“双重编译”会导致睡眠时间减半?注意海报在运行第一个程序后没有列出文件。 -
运行第一个程序的 10 秒时间足以在未记录的终端中编辑源代码并将其重命名为
compiled。请记住,文件名后缀(如.c)在 POSIX 系统(如 Linux)中是可选的。 :) -
所有那些阴谋论......现在正在入侵编译器优化。
-
过去有一个“双重编译”的概念用于优化,但实际上只是编译一次以找出方法有多大等,以告知优化器下一次迭代。只有在极少数情况下,这会导致双倍速度,我怀疑该方案是否已经使用了 20 年。
-
感谢@minitech,我找到了Reddit post where the author reveals the trick behind the joke。他只是将编译后的文件与幕后的另一个源文件交换,并将
gcc别名为gcc -x c,这样它就不会抱怨无法猜测源语言。
标签: c performance gcc optimization