1

如果我包含更多头文件,它会增加所需的 RAM 大小吗?#include <stdio.h>例如,如果我需要更多 RAM#include <string.h>吗?

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

4

6 回答 6

1

您真正想问的问题的答案可能是“不”,至少在您谈论标准库头文件时是这样。包括它们不会对可执行文件大小或内存占用产生影响。尽管如此,我还是忍不住给出了相反的回应:

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

// foo.c
int bigarray[1000];

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

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

于 2012-05-28T02:17:52.163 回答
0

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

于 2012-05-28T02:11:25.620 回答
0

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

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

于 2012-05-28T02:11:38.417 回答
0

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

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

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

于 2012-05-28T02:12:30.873 回答
0

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

我说“可能增加”是因为如果编译器足够聪明,我可以只包含二进制所需的数据,而丢弃其他的。</p>

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

于 2012-05-28T04:37:06.997 回答
-1

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

于 2012-05-28T04:35:57.777 回答