在c中,为什么编译大量文件比编写大文件需要更长的时间?

我最近将我的c项目中的一些非常大的文件拆分为许多较小的文件(基本上每个类一个文件).这使编译时间增加了一倍,并将生成的可执行文件从1.6mb扩大到2.4mb.为什么这会产生如此巨大的差异?

这是否必须在很多文件中包含一些标题而不是少数文件的直接结果?

漫画选项:

g -Wall -Wextra -g -ggdb -std = c 0x

我所指的可执行文件大小是在运行strip -s可执行文件之后.

尺寸:

之前使用调试符号:16MB

使用调试符号后:26MB

没有调试符号之前:1.5MB

没有调试符号后:2.4MB

附加问题:

我已经通过将标头放在pch.hpp中然后在我的g标志中使用-include pch.hpp选项来使用预编译头文件.这是使用gcc执行此操作的最佳方式吗?它似乎对编译时间的影响非常小.目前尚未预编译的唯一标题是项目的一部分,并且随着项目的大量开发而变化.

解决方法

有几个原因导致这种情况发生,这是一个题外话:

>较慢的磁盘访问(可能不是导致如此大幅增加的原因)
>包含相同标题的多个翻译单元意味着将这些标题粘贴到每个标题中.标题也会每次都进行预处理. (最可能的原因)
>标题中定义的静态变量或函数在每个翻译单元中都是重复的
>为每个专门化它们的翻译单元生成模板符号

这里有一些可以帮助你的东西 – 保留多个文件但减少编译时间:

>预编译头>批量构建 – 从构建中排除cpp文件,但将它们包含在已编译的不同实现文件中.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...