c语言sscanf函数的用法是什么
274
2022-09-18
代码从 “ctrl+F5” 到 “屏幕输出” 所经历的过程详解——翻译环境(编译+链接)+ 执行环境
文章目录
前言翻译环境
编译 = 预编译 + 编译 + 汇编链接
执行环境
前言
我们用编译器写完代码后,只需Crtl+F5即可让代码跑起来,最后将结果输出到屏幕上,那么你知道在这个过程中都经过了哪些步骤吗?
其实,在ANSI C(标准C)的任何一种实现中,都存在两个不同的环境,即翻译环境和执行环境。翻译环境,在这个环境中,代码被转换为可执行的机器指令。执行环境,它用于实际执行代码。
我们运行代码时都将经历这两个过程,最后才将运行结果呈现在屏幕上。
翻译环境
在翻译环境下,要经历两个过程,即编译和链接。我们写的程序中可能包含多个源文件(以.c为后缀),编译过程中这些源文件会单独经过编译器处理,最后生成对应的目标文件(以.obj为后缀),而在链接过程中,链接器会把这些目标文件和链接库(存放的是库函数信息)链接起来,最后生成可执行程序。
总结:
组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)。每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。链接器同时也会引入标准C库函数中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接到程序中。
例如,我们写一个简单的加法函数在源文件Add.c中,再写一个源文件test.c用于调用Add函数,当程序执行完毕后,我们可以在文件中找到这些文件:
接下来,我们再深入认识一下编译和链接中每一步具体干了些什么事。
编译 = 预编译 + 编译 + 汇编
编译过程其实又被细分为三个环节,即预编译,编译和汇编。一、预编译 在预编译这个环节,编译器主要会对C代码做这三件事:
头文件的包含。在预编译阶段,编译器会将代码中所包含的头文件都替换成头文件的内容。例如,#include
二、编译 编译阶段的主要任务就是将C代码翻译成汇编指令,这个过程主要包括这四个步骤:
三、汇编
汇编的时候会将汇编指令转换成二进制指令存放在相应的文件中(.obj为后缀),同时会给每个源文件汇总出来的符号分配一个地址,然后分别生成一个符号表。
链接
在链接过程中,编译器主要完成以下两个任务:
执行环境
exe程序执行的过程大概可以分为四个步骤:
程序首先要载入内存中。在有操作系统的环境中,该操作一般由操作系统来完成。在独立的环境中,程序的载入可以由手工完成,也可以通过可执行代码置入只读内存来完成。程序的执行开始。接着便调用main函数。开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留它们的值。终止程序。正常终止main函数,也可能是以外终止。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~