我一直有这样的想法,不知道那些是对的,那些是错的,请大家指正。
1、我对于程序的运行是这么理解的(window下):
首先是纯文本的代码,接着是编译器的词法分析,接着是语法分析,接着每种编译器按照Windows下程序的规则把分析好的东西翻译成汇编语言(我一直认为汇编语言是机器码的一种更流利美观的表现)。
这其中又分为变量的分配,函数入口指针的分配等等,总之很多,我知道的还很少。
我还这么想:C语言最后经过编译都生成汇编语言去执行,所以由C语言写成的操作系统最后也是要变成汇编语言去执行。
对于API函数,我一直认为是微软的工程师用C封装的砖头,然后再由API函数组成了操作系统。VC也好,Delphi也好,最后在编译的时候都分成几块:要么是变量的管理,要么是把操作系统的函数转化为API执行,等等
也就是说,Windows操作系统是由API写成的
2、对于.net,最后也是翻译成API,然后再到汇编,再执行,那些类库里的函数最后也翻译成API执行,.net做的是更好的安全性,因为他对于程序开发管的严格了,谨慎了。我知道我的想法肯定是不对的,所以别笑话我,但是我想,我愿意去听取大家的说法,请大家讨论一下,谢谢。

解决方案 »

  1.   

    看.net 的中间码的确是类似汇编语言,不过还没研究。我也初学,有好多东西要去琢磨、理解。占个位来学习 .
      

  2.   

    .net代码由JIT编译成MSIL代码,MSIL代码放在装配件中,装配件中还包含元数据。
      

  3.   

    .net代码由JIT编译成MSIL代码,MSIL代码放在装配件中,装配件中还包含元数据。
      

  4.   

    提醒一下,c\c++编译器生成的不是汇编语言。java,.net之类的托管语言编译器生成的才是一种类似汇编语言的东东
      

  5.   

    好像编译成MSIL,称之为多语言。
    再由JIT转成机器语言吧。呵呵……迷糊
      

  6.   

    MSIL其实不像汇编语言,因为他能用类,方法等等,所以他支持部分OOP,VS.NET带有两个DOC文件介绍了MSIL
      

  7.   

    我认为.net和Java很类似~~~~~生成的并非机器码
    是一个供.net 环境使用的中间代码
      

  8.   

    元数据在.NET程序运行当中起着很重要的作用,比如.NET CLR用它来分析一个类,并根据分析来实例化,能自我描述,这与COM中的Tlb有了很大的不同,由它所组成的.NET组建与COM有了完全的不同,等等优点.
    具体的你可以参考下MSDN
      

  9.   

    关于程序的运行,在《编译原理》里面有很详细的说明:源程序-》词法分析—》语法分析-》语义分析-》中间代码生成-》代码优化-》目标代码生成-》目标程序其间,每个过程都和表格管理和出错处理相联系。在.net框架上,C#语言会首先被解释为MS IL(微软中间语言),然后再使用JIT(即时编译)编译为可执行程序。这个过程和Java源程序首先被解释为Bytecode(字节码),然后再通过JVM(Java虚拟机)执行是类似的。这种代码的混合编译方式(兼有解释和编译)的好处在于:可以使代码在一个安全的可控的环境中运行,增强了程序的安全性,减少了由于语言自身特性(非安全类型:如指针)所引起的问题。C/C++是编译型语言。也就是说它们不需要进行解释,直接将源程序编译为目标程序。这样程序在运行的时候直接执行目标代码,而不用再一边解释一边执行,提高了程序的效率。所以C++/C开发的程序效率一般要优于纯解释型的语言。Win32 API是提供给Windows程序调用的操作系统提供服务的一种途径。在编程的时候,我们都不直接去操作硬件,而是通过调用Win32 API,再由操作系统去操作硬件。其实,Win32 API就是使用C语言编写的函数。.net框架里面新定义了一组基本类库,其实它就是构建在Win32 API的基础上的,可以认为是用于.net环境的API。这样的好处也是,编写的任何程序都会在一个受控的环境中,而不会直接去操纵操作系统提供的API。其实,这也就是微软的策略,如果.net环境提供强大的安全性,保证.net程序不会对操作系统进行破坏,这样微软可以改善WINDOWS操作系统的不稳定性,继续垄断操作系统……
      

  10.   

    说得不太对。编译器把代码编译成MSIL。
    运行时由CLR转为本机代码运行,是真正的机器码,没有汇编这一过程。有文章说就因为Java的东东始终都是在它的虚拟机上执行,但.Net的最终是本机执行的,所以比Java快。