C程序是如何执行的?

每当编译和执行C程序文件时,编译器都会生成一些与C程序文件同名但扩展名不同的文件。那么,这些文件是什么?它们是如何创建的?

null

下图显示了编译过程以及在编译过程的每个步骤中创建的文件: 图片[1]-C程序是如何执行的?-yiteyi-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++库

CPU寄存器

指令寄存器 :它保存由CPU执行的当前指令。 程序计数器 :它包含CPU执行的下一条指令的地址。 累加器 :它存储与计算相关的信息。

加载程序将第一条指令通知程序计数器,并启动执行。然后,程序计数器处理该任务。

链接器和加载程序之间的区别

连接器 装载机
链接器生成源程序的可执行模块。 加载器将可执行模块加载到主存中执行。
链接器将汇编程序生成的目标代码作为输入。 加载器将链接器生成的可执行模块作为输入。
链接器将源代码的所有目标模块组合起来,生成一个可执行模块。 加载器将地址分配给主存中的可执行模块以执行。
链接器的类型有链接编辑器、动态链接器。 装载机的类型有绝对装载、可重新定位装载和动态运行时装载。
© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享