• 关于C#的编译与执行


    每一种编程语言,要想执行,就必须要转换为目标操作系统能够理解的语言才能执行,这种语言叫做本机代码(native code)。C#也是一样的,也要做这样的转换,但是它不是一处到位的,在.NET Framework这个平台下,该过程分为两个阶段。

    (1)C#代码编译为中间语言代码的阶段-----在编译C#代码时,并不是立即创建了本地代码,而是通过C#编译器(这个编译器集成在Visual Studio里面)把代码编译为通用中间语言(Common Intermediate Language,CIL)代码,也就是IL代码,并将其存储在一个程序集中。程序集中除了有IL代码外,还将包括元数据和可选的资源文件:元数据是用来描述代码中的类型,这种描述针对3个方面:类型定义的描述、类型成员的描述和类型引用成员的描述;可选的资源文件指的是IL代码中使用的其他数据,如图片文件等。(PS:在C#中,程序集分为两种,扩展名为.exe的可执行文件和扩展名为.dll的可供其他程序调用的库文件。)

    (2)中间语言代码(IL代码)转换为本地代码的阶段-----要使代码能够在目标操作系统上运行,还需要进一步把CIL代码转换为特定CPU的本机代码,该过程是由即时编译器(Just-In-Time,JIT)来完成的。

    最后就是执行本机代码了,JIT编译生成本机代码之后,编译好的本机代码会被存储在一个缓冲区中缓存,下次调用相同的程序集时,可直接从缓冲区中获取本机代码,从而避免了二次验证和编译。这样的使用方式,系统只在首次调用时才会造成一些性能损失(JIT编译过程),所以C#程序在第一次调用的时候,会明显感觉慢一些。下面这张图是我在网上找的,很浅白的说明了代码的执行过程。

  • 相关阅读:
    PAT:循环-12. 打印九九口诀表(15) AC
    PAT:循环-07. 爬动的蠕虫(15) 错两个
    PAT:循环-01. 求整数段和(15) AC
    PAT:分支-16. 计算分段函数(10) AC
    PAT:分支-10. 计算个人所得税(10) AC
    PAT:分支-08. 高速公路超速处罚(15) AC
    UIToolBar
    iOS 代码实现获得应用的版本号(Version/Build)
    IOS开发之 ---- iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)
    IOS开发中的CGFloat、CGPoint、CGSize和CGRect
  • 原文地址:https://www.cnblogs.com/Helius/p/5271634.html
Copyright © 2020-2023  润新知