C 程序是否将所有内容加载到内存中?

Mat*_*ell 1 c

今天我在练习C语言,突然想到一件事。每当运行 C 代码时,它是否会将执行所需的所有文件加载到内存中?例如,main.c 文件及其头文件是否被复制到内存中?如果您有一个完整的 C 程序占用 1 GB 或更大的空间,会发生什么情况?

Mic*_*ich 5

AC 程序首先被编译成二进制可执行文件,因此此时头文件、源文件等不再存在......除非您使用调试信息(-g标志)编译二进制文件。

这是一个很大的话题。通常,可执行文件被映射到所谓的虚拟内存中,这允许寻址比计算机内存中可用的空间更多的空间(通过分页)。当您尝试访问尚未加载的代码段时,它将创建页面错误,并且操作系统将获取丢失的内容。编译器通常会重新排序函数以避免从随机内存位置执行代码,因此大多数时候您只执行二进制文件的一小部分。

如果您研究特定领域(例如 HPC 或嵌入式设备),加载策略可能会有所不同。