计算机执⾏程序代码的过程分析
计算机语⾔的分类:
计算机语⾔的分类,⼤体上可以分为机器语⾔,汇编语⾔,⾼级语⾔三⼤类。
机器语⾔:
计算机能够直接执⾏的是机器语⾔,由⼆进制代码来组成,可以直接对硬件进⾏操作,对于⼈来说,⾮常不容易编写。
汇编语⾔:
汇编语⾔的是指和机器语⾔是相同的,都是直接对硬件进⾏操作,采⽤的是英⽂缩写的标⽰符。同样需要我们将每⼀步的具体操作都要⽤语⾔写出来,⽐较复杂(相对于⾼级语⾔,但是肯定⽐机器语⾔好多啦)。
⾼级语⾔:
⾼级语⾔是将很多机器的指令合并,去掉了很多细节,⼤⼤简化了程序,对于程序员的要求也低了很多。现在常⽤的C,C++,JAVA等等语⾔,都属于⾼级语⾔。但是⾼级语⾔不能直接对硬件进⾏操作。
再来看⼀下⼏个概念。
编译,汇编过程,解释,脚本,解释型语⾔,编译型语⾔。
由于计算机智能读懂机器语⾔,所以汇编语⾔和⾼级语⾔必须经过⼀些列的处理来转化为机器语⾔才可以。
对于汇编语⾔,这个转化过程,就是通过汇编程序,把汇编语⾔转化为机器语⾔,这个过程,成为汇编过程。
对于⾼级语⾔,就是通过编译过程,使之转化为机器语⾔。(编译过程中其实也是经历了先编译成汇编语⾔,再通过汇编程序转化为机器语⾔的过程)⼀般通过编译器来执⾏。
编译器的翻译过程,其实是分为编译和解释两种的。
编译就是对于⾼级语⾔,⼀次性转化为可执⾏的机器语⾔,然后执⾏(执⾏的时候就没有编译器什么事⼉啦);
⽽解释,相当于是⼀边转化,⼀边运⾏的,中间不⽣成可执⾏的⽂件,⽽每⼀次运⾏,都需要重新解释⼀遍。不像编译可以⼀次编译,后⾯⽆论执⾏多少次都不⽤再重来了(代码不变的话)。
从字⾯上理解,通过编译来执⾏的语⾔是编译型语⾔,通过解释来运⾏的是解释⾏语⾔。解释型语⾔有⾃⼰的解释器。
java语⾔我们在上⾯没有说,应该它不是标准的编译型也不是标准的解释型。
java也需要编译,但是它是编译成java字节码⽂件,相当于可以直接运⾏在javaVm(虚拟机)上的机器代码。然后再对这个字节码⽂件通过解释的形式来运⾏,即对于字节码,通过解释器,编译⼀句,运⾏⼀句。
JAVA的解释器,就相当⼀个JAVAVM.JAVA语⾔的这种特性,也形成了它跨平台的优点,JAVA字节码使得“写⼀次,到处运⾏”。只要装有JAVA虚拟机的平台上,都可以运⾏。其实这⼀点,我以前不太理解,因为其他编译型语⾔也可以编译⼀次,运⾏多次。⽽且不像JAVA这么⿇烦,还要运⾏在JAVA虚拟机上。现在想来,正是这种⿇烦造就了跨平台的特点,因为其他语⾔直接编译成的⼆进制机器码,不⼀定能够适应所有的平台。⽽只要能够安装JAVA虚拟机的平台,都可以运⾏JAVA字节码。(web程序中,可以运⾏JAVA的浏览器也算是⼀种JAVAVm实例)。
⼀句话来说,其他语⾔是直接运⾏在硬件平台上的,⽽JAVA是运⾏在硬件平台上的纯软件平台上的。
c ,c++的程序编译过程:
为了说明程序的编译过程,我们⽤经典的hello world程序作为例⼦:
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("hello world\n");
return0;
}
金晨邓伦一夜未停在linux系统中,我们⽤GCC编译器将源程序⽂件helloworld.c编译成可执⾏⽬标⽂件helloworld。
zengwh@zengwh:~/test_code$ gcc helloworld.c -o hello
zengwh@zengwh:~/test_code$ ./hello宋茜青春不败
hello world
林涵照片
这个过程经过四个阶段,分别是预处理阶段,编译阶段,汇编阶段和链接阶段。执⾏这个四个阶段的程序分别是预处理器,编译器,汇编器和链接器,⼀起构成了编译系统。
•预处理阶段:预处理器(cpp)根据‘#’包含的头⽂件,将头⽂件的内容加进源程序中。得到新的程序⽂件⽂本,以“.i”为⽂件扩展名。⽐如说helloworld程序包含stdio.h头⽂件,这个阶段将这个头⽂件的内容插进源程序中
•编译阶段:编译器(ccl)将⽂本⽂件hello.i翻译成汇编程序hello.S。也就是将⾼级语⾔翻译成汇编代码,低级的机器语⾔指令。
重阳节祝福佳句•汇编阶段:汇编器(as)将汇编程序hello.S翻译成机器指令,将这些指令打包成可重定位⽬标程序的格式,并把结果保存在hello.o⽂件中,hello.o是个⼆进制⽂件。dnf弹药聚合弹
•链接阶段:链接器(ld)将会把⼀个⼯程中所有的.o⽂件链接合并成⼀个可执⾏⽬标⽂件,可以被加载在内存中,由系统运⾏。
以上就是c,c++程序编译过程;
红酒如何开系统硬件组成:
系统硬件组成:
程序具有访问局部区域⾥的数据和代码的趋势。通过将可能经常访问的数据保存在⾼速缓存中的⽅法,⼤部分的存储器操作都将在快速的⾼速缓存中完成,程序性能⼤⼤提升。
操作系统管理硬件:
在处理器中,指令集结构是对实际处理器硬件的抽象,在操作系统中,⽂件是对I/O的抽象,虚拟存储器是对程序存储器的抽象,进程是对⼀个正在运⾏的程序的抽象,虚拟机则是对整个计算机(包括操作系统,处理器和程序)的抽象
•堆:堆可以运⾏的时候动态地扩展和收缩,⽐如调⽤malloc或free函数的时候。
•共享库:⼤约在地址中间,⽤来存放像C标准库或数学库这样共享的代码和数据区域。
•栈:位于⽤户虚拟地址空间顶部的是栈,编译器同它来实现函数调⽤。和堆⼀样,在程序运⾏期间可以动态地扩展和收缩。每调⽤函数,栈增长,函数返回,栈收缩。
•内核虚拟存储器:位于⽤户虚拟地址空间顶部的是栈,编译器同它来实现函数调⽤。和堆⼀样,在程序运⾏期间可以动态地扩展和收缩。每调⽤函数,栈增长,函数返回,栈收缩。