zoukankan      html  css  js  c++  java
  • 计算机执行程序代码的过程分析

    计算机语言的分类:

    计算机语言的分类,大体上可以分为机器语言,汇编语言,高级语言三大类。

    机器语言:

    计算机能够直接执行的是机器语言,由二进制代码来组成,可以直接对硬件进行操作,对于人来说,非常不容易编写。

    汇编语言:

    汇编语言的是指和机器语言是相同的,都是直接对硬件进行操作,采用的是英文缩写的标示符。同样需要我们将每一步的具体操作都要用语言写出来,比较复杂(相对于高级语言,但是肯定比机器语言好多啦)。

    高级语言:

    高级语言是将很多机器的指令合并,去掉了很多细节,大大简化了程序,对于程序员的要求也低了很多。现在常用的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!!!
    ");
        return 0;
    }

    在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是个二进制文件。
    •链接阶段:链接器(ld)将会把一个工程中所有的.o文件链接合并成一个可执行目标文件,可以被加载在内存中,由系统运行。 

    以上就是c,c++程序编译过程;

    系统硬件组成:

     

     系统硬件组成:

    程序具有访问局部区域里的数据和代码的趋势。通过将可能经常访问的数据保存在高速缓存中的方法,大部分的存储器操作都将在快速的高速缓存中完成,程序性能大大提升。 

    操作系统管理硬件:

    在处理器中,指令集结构是对实际处理器硬件的抽象,在操作系统中,文件是对I/O的抽象,虚拟存储器是对程序存储器的抽象,进程是对

    一个正在运行的程序的抽象,虚拟机则是对整个计算机(包括操作系统,处理器和程序)的抽象


                    •堆: 堆可以运行的时候动态地扩展和收缩,比如调用malloc或free函数的时候。

                    •共享库:大约在地址中间,用来存放像C标准库或数学库这样共享的代码和数据区域。

                    •栈: 位于用户虚拟地址空间顶部的是栈,编译器同它来实现函数调用。和堆一样,在程序运行期间可以动态地扩展和收缩。每调用函数,栈增长,函数返回,栈收缩。

                    •内核虚拟存储器: 位于用户虚拟地址空间顶部的是栈,编译器同它来实现函数调用。和堆一样,在程序运行期间可以动态地扩展和收缩。每调用函数,栈增长,函数返回,栈收缩。

  • 相关阅读:
    C#进行图片压缩
    C# ASHX生成验证码图片及校验
    SQL和MYSQL及数据库
    复制项目取消SVN
    SQL获取表结构的字段说明和结构
    SQL如何创建存储过程
    python 自带模块 os模块
    osi七层简介(通俗易懂)
    Python sys模块
    python 的装饰器
  • 原文地址:https://www.cnblogs.com/yujian-bcq/p/4581286.html
Copyright © 2011-2022 走看看