我知道多个文件到目前为止会使代码更容易。但是它们在“将它们全部压缩到一个文件”之间提供了性能差异,或者像gcc这样的现代编译器会为两者创建相同的二进制文件。当我说性能差异时,我指的是文件大小,编译时间和运行时间。
这仅适用于C.
答案 0 :(得分:2)
可以说,编译时间会因多个文件而改善,因为您只需要重新编译已更改的文件(假设您有一个合适的依赖跟踪构建系统)。
链接可能需要更长时间,因为还有更多工作要做。
传统上,编译器无法跨多个源文件执行优化(内联函数之类的东西很棘手)。因此,生成的可执行文件可能会有所不同,并且可能会更慢。
答案 1 :(得分:2)
当所有内容都在一个文件中时,有更多机会进行优化。例如。 gcc,从-O2
开始,如果它们的主体可用,它们将内联一些函数,即使它们未被内联声明(更多函数有资格使用-O3
进行内联)。因此,运行时间存在差异,有时您甚至有机会注意到它们。使用-fwhole-program
更是如此,告诉GCC您不关心除main()
之外的外部函数的外联版本(GCC表现得好像所有外部函数都变为静态)。
整体编译时间可能会增加(因为需要分析更多内容,并非所有优化器算法都是线性的)或减少(当不需要多次解析相同的头时)。二进制大小可能会增加(由于内联,以换取更快的运行)或减少(不太可能;但有时,内联会将调用者的代码简化为代码大小减小的点)。
由于易于开发和维护,您可以使用sqlite的方法:它有多个源文件,但在编译之前它们被卡在一个(“合并”)。
答案 2 :(得分:0)
从某些测试来看,编译和链接需要更长时间。你将收到一个不同的二进制文件,至少我做了,但是我的是另一个的一个字节。
一体化文件在.000764 MS
中运行
多个文件版本在.000769 MS
中运行
确实把基准用了一粒盐,就像我在大约5分钟内把它放在一起一样,这是一个很小的程序。
所以整体上没有差异。