C:#include增加RAM大小?

时间:2012-05-28 02:09:18

标签: c memory stack heap ram

我想问一下,如果我包含更多头文件,是否会增加所需的RAM大小?例如,如果我#include <stdio.h>#include <string.h>

,我还需要更多内存吗?

我正在用CNU C编译器编写一个嵌入式系统软件,所以我希望尽可能减少所需的RAM。

6 个答案:

答案 0 :(得分:1)

你真正想问的答案可能是“不”,至少在你谈论标准库标题时。包含它们不会对可执行文件大小或内存占用量产生影响。尽管如此,我无法抗拒给出相反的回应:

这取决于您所包含文件中的内容。系统头文件不会这样做,但理论上,任何东西都可以在该文件中。标头只包含函数原型和类型定义只是一种约定。如果我有这两个文件:

// foo.c
int bigarray[1000];

// bar.c
#include "foo.c"
int main(int argc, char**argv()) {
return 0;
}

这是合法的代码和bar.c会很好地编译,但由于foo.c中的数组(如果编译器没有优化它),我的内存占用量可能会大4K。

答案 1 :(得分:0)

不,包含文件用于编译器;它们根本不会影响生成代码的大小。

答案 2 :(得分:0)

没有。包含文件不是函数,它们是对系统函数的引用(至少对于编译器附带的函数)。如果您想亲自查看,请导航到编译器的include目录,然后在文本编辑器中打开文件(但不要更改它们)。它们与您编写的任何其他.h相同;他们没有定义任何功能。

编译器将看到函数名(例如printf)有效并将其编译为目标文件。链接器负责将该名称转换为有效的系统调用。

答案 3 :(得分:0)

标头包含仅在编译期间有效。它们用于告诉编译器他可以在哪里找到他需要的实现。

编译后的可执行文件不包含这些信息,因此不受包含数量的影响。

这与PHP等解释性语言有很大不同,其中包含文件可以增加内存使用量。但即使在PHP中也存在最小化内存使用的机制(包括文件一次,不包括未使用的包括......)

答案 4 :(得分:0)

是的,我可能会增加二进制大小,然后增加RAM大小。 它有两种方式: 1.头文件具有全局/静态变量定义 2.头文件具有即使不用于当前文件的功能。但是编译器仍然可以将它们保留在最终的二进制文件中。

我说“可能会增加”,因为如果编译器足够智能,我只能包含二进制所需的数据,但会丢弃其他数据。

对于其他内容可能在头文件中,如变量声明,typedef等,它们不会增加RAM,因为它只在编译时需要,而不是运行时。

答案 5 :(得分:-1)

是,但只是稍微..但确实会增加CPU使用率。你可以在Windows任务管理器中查看它....