如果我包含更多头文件,它会增加所需的 RAM 大小吗?#include <stdio.h>
例如,如果我需要更多 RAM#include <string.h>
吗?
我正在用 CNU C 编译器编写一个嵌入式系统软件,所以我想尽可能减少所需的 RAM。
如果我包含更多头文件,它会增加所需的 RAM 大小吗?#include <stdio.h>
例如,如果我需要更多 RAM#include <string.h>
吗?
我正在用 CNU C 编译器编写一个嵌入式系统软件,所以我想尽可能减少所需的 RAM。
您真正想问的问题的答案可能是“不”,至少在您谈论标准库头文件时是这样。包括它们不会对可执行文件大小或内存占用产生影响。尽管如此,我还是忍不住给出了相反的回应:
这取决于您包含的文件中的内容。系统头文件不会这样做,但理论上,该文件中可以包含任何内容。标头仅包含函数原型和类型定义只是一种约定。如果我有这两个文件:
// foo.c
int bigarray[1000];
和
// bar.c
#include "foo.c"
int main(int argc, char**argv()) {
return 0;
}
这是合法代码,bar.c 可以很好地编译,但是由于 foo.c 中的数组(如果编译器没有优化它),我的内存占用可能会大 4K。
不,包含文件用于编译器;它们根本不影响生成代码的大小。
不,包含文件不是函数,它们是对系统函数的引用(至少对于编译器附带的那些)。如果您想亲自查看,请导航到include
编译器的目录并在文本编辑器中打开文件(但永远不要更改它们)。它们与.h
您编写的任何其他内容相同;他们没有定义任何功能。
编译器将看到函数名(例如 printf)是有效的,并将其编译为目标文件。链接器负责将该名称转换为有效的系统调用。
包含头文件仅在编译期间有效。它们用于告诉编译器在哪里可以找到他需要的实现。
编译后的可执行文件不包含这些信息,因此不受包含数量的影响。
这与 PHP 等解释性语言有很大的不同,其中包含文件会增加内存使用量。但即使在 PHP 中,也有最小化内存使用的机制(包括一次文件,不包括未使用的包含...)
是的,我可能会增加二进制大小,然后增加 RAM 大小。它有两种方式: 1. 头文件具有全局/静态变量定义 2. 头文件具有即使它不用于当前文件的功能。但是编译器可能仍将它们保存在最终的二进制文件中。
我说“可能增加”是因为如果编译器足够聪明,我可以只包含二进制所需的数据,而丢弃其他的。</p>
对于其他内容,可能在头文件中,例如变量声明,typedef等。它们不会增加RAM,因为它只在编译时需要,而不是在运行时需要。
是的,但只是略微......但它确实增加了 CPU 使用率。您可以在 Windows 任务管理器中查看它。...