何为编译
‘壹’ 计算机是怎样运行程序的
为了使计算机程序得以运行,计算机需要加载代码,同时也要加载数据,然后由处理器执行指令。整个过程可以总结为编译、链接、装载、执行。
1、编译
编译过程又可以被分为两个阶段:编译、汇编。
编译是指编译器读取字符流的源程序,对其进行词法与语法的分析,将高级语言指令转换为功能等效的汇编代码。
汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编相对于编译过程比较简单,根据汇编指令和机器指令的对照表一一翻译即可。
2、链接
链接的主要内容是将各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接。链接又分为静态链接和动态链接:
静态链接是指在编译阶段直接把静态库加入到可执行文件中去,这样可执行文件会比较大;
动态链接则是指链接阶段仅仅只加入一些描述信息,而程序执行时再从系统中把相应动态库加载到内存中去。
3、装载
程序在经过链接后,得到了可执行文件,下一步就需要将可执行程序加载到内存中。
由于现代操作系统均采用分页的方式来管理内存,所以操作系统只需要读取可执行文件的文件头,之后建立起可执行文件到虚拟内存的映射关系,而不需要真正的将程序载入内存。
4、运行
加载器将可执行目标文件中的代码和数据从磁盘复制到内存中,然后通过跳转到程序的第一条指令或入口点来运行程序。
在程序的运行过程中,CPU发现有些内存页在物理内存中并不存在并因此触发缺页异常,此时CPU将控制权限转交给操作系统的异常处理函数,操作系统负责将此内存页的数据从磁盘上读取到物理内存中。
数据读取完毕之后,操作系统让CPU jmp到触发了缺页异常的那条指令处继续执行,此时指令执行就不会再有缺页异常了。
(1)何为编译扩展阅读
为使计算机按预定要求工作,首先要编制程序,无论是最早的操作系统还是现代操作系统,程序的运行都是计算机工作的本质。
早期计算机是单任务执行,由程序员直接编写操作系统可以识别的机器语言,到现在可以实现多道程序并行,并且程序的开发由更利于程序员理解的高级语言编写,源程序在经过一系列翻译过程,变成计算机理解的机器语言,再执行。
整个程序执行的过程,需要CPU、内存、程序代码、设备等配合,才能实现程序要表达的功能。
‘贰’ 解释和编译有何区别
1楼的人 不是回答你的问题 他是来赚积分的
一个源语言的解释程序是这样的程序,它以该语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。
编译嘛.. 我都还没过呢 不好意思解释
‘叁’ 编译程序和解释程序有何区别
编译程序能生成目标程序,而解释程序不能。
‘肆’ 编译和运行有何区别>>>>>>>>>>>>>
编译:
包括编译和链接两个过程。
编译部分,是把源文件(代码)转换成机器可以识别的二进制语言,这个过程是针对每一个源文件的。
链接,是把编译生成的二进制文件,组合成为一个系统可以执行的可执行文件。
这两部分整体也叫编译。也就是说,广义的编译,就是把代码,转换成可执行文件。
运行:
把编译出来的可执行文件,在系统中运行的过程,称为程序的运行。
打个比方,编译就是做饭的过程,而运行,就是吃饭。二者是完全不同的概念,是计算机软件开发的两个步骤。
‘伍’ 易语言中的编译和静态编译有何区别
静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。而编译就是把可执行文件和支持库一起写出到外部,在需要的时候直接对其中一个支持库进行搜索某一条命令.
打个比方.
你家有6个罐子,里面分别放了1块,5块,10块,20块,50块,100块.
然后你出门的时候要带每一种钱各一个,所以就从这六个罐子里每个罐子都拿出一张钱.
这就是静态编译.
我再打个比方.
你家还是有6个罐子,里面分别放了1块,5块,10块,20块,50块,100块.
然后你出门的时候,还是想要都带一种,然后你就不是每个罐子里拿钱了,而是直接把整个罐子都带在了身上出门.
相比起来,静态编译要轻松,小巧了许多了.
lz 手打很累的 采纳吧