每当编译和执行C程序文件时,编译器都会生成一些与C程序文件同名但扩展名不同的文件。那么,这些文件是什么?它们是如何创建的?
下图显示了编译过程以及在编译过程的每个步骤中创建的文件:
每个包含C程序的文件都必须用“”保存。c’分机。这对于编译器理解这是一个C程序文件是必要的。假设先命名一个程序文件。c、 首先是文件。c被称为源文件,它保存程序的代码。现在,当我们编译文件时,C编译器会查找错误。如果C编译器没有报告错误,那么它会将文件存储为。同名的obj文件,称为对象文件。所以,这里它将创建第一个。obj。这obj文件不可执行。这个过程由链接器继续,链接器最终给出一个。可执行的exe文件。
连接器 :首先,让我们知道库函数不是任何C程序的一部分,而是C软件的一部分。因此,编译器不知道任何函数的操作,无论是printf还是scanf。这些函数的定义存储在各自的库中,编译器应该能够链接这些库。这就是链接器所做的。所以,当我们写#include时,它包括stdio。提供标准输入和输出的h库。链接器将目标文件链接到库函数,程序成为一个链接。exe文件。这里,首先。将以可执行格式创建exe。
装载机 :每当我们发出执行特定程序的命令时,加载程序就开始工作。加载器将加载数据。exe文件,并通知CPU该程序加载的起始地址。
![图片[2]-C程序是如何执行的?-yiteyi-C++库](https://www.yiteyi.com/wp-content/uploads/geeks/geeks_gfg3-12-213x300.png)
CPU寄存器
指令寄存器 :它保存由CPU执行的当前指令。 程序计数器 :它包含CPU执行的下一条指令的地址。 累加器 :它存储与计算相关的信息。
加载程序将第一条指令通知程序计数器,并启动执行。然后,程序计数器处理该任务。
链接器和加载程序之间的区别
连接器 | 装载机 |
---|---|
链接器生成源程序的可执行模块。 | 加载器将可执行模块加载到主存中执行。 |
链接器将汇编程序生成的目标代码作为输入。 | 加载器将链接器生成的可执行模块作为输入。 |
链接器将源代码的所有目标模块组合起来,生成一个可执行模块。 | 加载器将地址分配给主存中的可执行模块以执行。 |
链接器的类型有链接编辑器、动态链接器。 | 装载机的类型有绝对装载、可重新定位装载和动态运行时装载。 |