【发布时间】:2016-01-31 07:05:02
【问题描述】:
在编写可以在 C 中并行执行的代码的程序时,我们肯定会使用O flags 来优化代码。
gcc -Olevel [options] [source files] [object files] [-o output file]
在大型项目中,我们通常split the code into several files。我没有找到答案的问题是:
由于我们将代码拆分为文件并且O 标志没有足够的信息来进一步优化,程序的性能是否会下降?有这种可能吗?
【问题讨论】:
-
如果您将其拆分为包含在
#include中的文件,它无法 产生任何影响。如果你把它拆分成单独编译的组件,我仍然严重怀疑它:编译器优化非常本地化。但我不能说这是事实,所以这不是一个答案...... -
我已经将个人项目拆分为文件,性能下降了很多。我专门问了一个问题,但我没有回答,所以我删除了它。现在我并不是说这是因为代码拆分而发生的,但我想了解这是否可能,因为对我来说这似乎不太可能。
-
“我并不是说这是因为代码拆分”。您是否只是将项目拆分为单独的文件,仅添加了必要的标头和最少的必要链接器详细信息,还是您也更改了其他条件?
-
由于我的项目与双音排序的各种实现有关,因此我将每个实现拆分为一个 .c 文件,其各自的头文件用于定义。现在问题来了:当主文件包含头文件并且通过makefile完成编译以分别编译文件时,我得到的性能比直接包含.c文件时要差。我没有更改文件中的任何内容,我只是添加了头文件,其中包含我必须使用的全局变量和函数定义的 extern 声明。
标签: c gcc lto translation-unit