使用多个文件C而不是将它们全部放入单个文件时,二进制文件是否存在差异?

时间:2013-01-05 09:58:02

标签: c runtime multifile

我知道多个文件到目前为止会使代码更容易。但是它们在“将它们全部压缩到一个文件”之间提供了性能差异,或者像gcc这样的现代编译器会为两者创建相同的二进制文件。当我说性能差异时,我指的是文件大小,编译时间和运行时间。

这仅适用于C.

3 个答案:

答案 0 :(得分:2)

可以说,编译时间会因多个文件而改善,因为您只需要重新编译已更改的文件(假设您有一个合适的依赖跟踪构建系统)。

链接可能需要更长时间,因为还有更多工作要做。

传统上,编译器无法跨多个源文件执行优化(内联函数之类的东西很棘手)。因此,生成的可执行文件可能会有所不同,并且可能会更慢。

答案 1 :(得分:2)

当所有内容都在一个文件中时,有更多机会进行优化。例如。 gcc,从-O2开始,如果它们的主体可用,它们将内联一些函数,即使它们未被内联声明(更多函数有资格使用-O3进行内联)。因此,运行时间存在差异,有时您甚至有机会注意到它们。使用-fwhole-program更是如此,告诉GCC您不关心除main()之外的外部函数的外联版本(GCC表现得好像所有外部函数都变为静态)。

整体编译时间可能会增加(因为需要分析更多内容,并非所有优化器算法都是线性的)或减少(当不需要多次解析相同的头时)。二进制大小可能会增加(由于内联,以换取更快的运行)或减少(不太可能;但有时,内联会将调用者的代码简化为代码大小减小的点)。

由于易于开发和维护,您可以使用sqlite的方法:它有多个源文件,但在编译之前它们被卡在一个(“合并”)。

答案 2 :(得分:0)

从某些测试来看,编译和链接需要更长时间。你将收到一个不同的二进制文件,至少我做了,但是我的是另一个的一个字节。

一体化文件在.000764 MS中运行 多个文件版本在.000769 MS中运行 确实把基准用了一粒盐,就像我在大约5分钟内把它放在一起一样,这是一个很小的程序。

所以整体上没有差异。