包含过多的头文件是否会增加源文件的大小,也会增加可执行文件的大小吗?这些头文件会增加编译时间吗?
例如,如果我在程序中添加这些头文件,它们会增加源文件或可执行文件的大小还是两者都会增加?
#include <stdio.h>
#include "header1.h"
#include "header2.h"
太多头文件的问题还有哪些?
包含过多的头文件是否会增加源文件的大小,也会增加可执行文件的大小吗?这些头文件会增加编译时间吗?
例如,如果我在程序中添加这些头文件,它们会增加源文件或可执行文件的大小还是两者都会增加?
#include <stdio.h>
#include "header1.h"
#include "header2.h"
printf()
或scanf()
)的函数定义? - Anonymouswindows.h
的包含树有多大,以及它与 Linux 的包含树相比如何。但是秒数很长,想象一下一个有1000个源文件的项目,当每个源文件仅包含需要3秒时,你已经失去了50分钟的CPU时间。 - 12431234123412341234123strlen("#include <stdio.h>");
字节?我读到编译器将用相应头文件中的所有代码替换头文件。 - Anonymous与什么相比? 例如,如果在头文件中包含了构建所需的必要组件,例如函数原型、这些头文件是否会增加编译时间?
#defines
等,则编译时间就是正常的编译时间。但是,如果您已经使用了3个必要的头文件进行编译,并决定添加新库(及其相应的头文件),那么下一次编译肯定比之前的时间长。
< p > < em > 太多了吗? 如果每个头文件都是必需的,那么就不会太多(附带关于 最大头文件深度 的警告)。但是,如果发现一个头文件是 < em > 不必要的 ,那么就应该摆脱它的 代码膨胀 。这会增加编译时间,因为构建过程必须查看每个头文件,无论其中是否有任何有用的内容。更糟糕的是,< em > 不必要的 头文件会增加复杂性,并给未来维护者的任务带来困难。包含太多头文件的其他问题是什么?
这里有一篇好的文章详细讨论了这个问题。
此外,这是一个有趣的页面,也讨论了头文件。
strlen("#include <stdio.h>");
字节?我读到编译器将用相应头文件中的所有代码替换头文件。 - Anonymousfile
块内存分配的影响。 (一些操作系统按块分配文件大小,每个分配1 kByte,因此即使只有一个字符,也会导致1 kByte的文件块分配大小,接下来的999个字符是免费的(不再分配块),但再加上一个字符(现在是1001字节)将导致额外的1 kByte块文件大小。(请注意,物理文件大小仍然... - ryykerint len = strlen("#include <stdio.h>")
,通过添加此语句,文件的物理大小仅增加了len
个字节。请注意,包含头文件对后续对象(例如生成的二进制代码或编译器必须遍历的内容量)的影响非常大。 - ryyker头文件不应该产生任何额外的代码,除非它们设计得很差。如果头文件产生了额外的代码并且您多次包含它们,则可能会遇到重定义问题。在这里,代码是指“机器代码”,即可执行代码。
关于源代码,编译器将最终将源代码视为一个包含 #include 指令替换为文件内容的大型源代码,因此添加更多的头文件将增加编译时间(因为表面上的源代码将变得更长)。因此应避免包含不必要的文件。
gcc -E
),否则您可能永远不会看到完全展开的文件。struct
或 enum
,只声明这样的 struct
或 enum
存在。 - 12431234123412341234123
#include <someheader>
时,源文件的大小显然会增加。 2: 可能吧,这取决于头文件的内容。 3: 很可能是肯定的,这也取决于头文件的大小和复杂程度。 4: “太多” 是什么意思? - Jabberwocky