在源文件中使用包含头文件(在其中声明的所有函数)的影响是什么?它会影响堆栈大小等吗?
答案 0 :(得分:6)
它没有任何效果,但会增加编译时间并使代码更难理解和维护。您应该只包含实际需要的标头,并删除那些变得多余的标头。
答案 1 :(得分:6)
这取决于头文件中是否有 definitions 或只是声明。
它还完全取决于实现,因为ISO C标准对于如何在该级别完成工作没有任何意义。它仅涵盖事物在“C虚拟机”级别上的行为方式。但我会在这里介绍最可能出现的情况。
诸如int xyzzy;
(或更糟,char big_honkin_thing[9999999];
)之类的定义可能会占用目标文件中的空间,除非您有一个特别聪明的链接器,否则也会占用可执行文件。我说“可能”,因为这取决于实施。
初始化值更有可能确保它存储在对象中而不是在运行时创建。但是你可能会发现这样的效果,无论是较大的对象/可执行文件,如果它是在编译时创建的,或者(稍微)较慢的启动时间,因为更多的内存必须进行零初始化。
例如,将char big[99999] = {'x'};
添加到头文件会导致可执行文件的大小从18K到118K。
typedef
和extern
等简单声明内容不会在对象中分配空间。
此外,即使没有定义的,编译时间也会增加,因为编译器必须处理该头文件。但这不会对运行时(速度或存储)本身产生任何影响。
答案 2 :(得分:4)
堆栈大小由链接器决定。大概你实际上意味着发出的代码是否更大。
包含一个头文件,其声明从未在该转换单元中引用,不会影响生成的对象的大小。当然,它会减慢编译速度。
答案 3 :(得分:2)
它会增加编译时间,但AFAIK不应该有任何其他更改。
答案 4 :(得分:0)
与使用头文件访问源文件相比,直接访问源文件将花费更少的时间,如果标题中没有任何内容可以影响源文件。