• 托管代码---> CLR --> 自宿主


    一、托管代码

        定义:托管代码同受管制的代码,由公共语言运行库环境(而不是直接由操作系统)执行的代码,托管代码应用程序可以获得公共语言运行库服务,例如:自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。

    1.托管代码和非托管代码

    托管/非托管是微软.net 中的特有概念。

    非托管代码:也叫本地代码

    托管代码:由公共语言运行库(CLR)执行的代码,而不是由操作系统直接执行。

    本地代码经过两次编译:(1)源码编译为中间代码(MSIL,MicrosoftIntermediate Language)

                 (2)由.net 的 CLR将中间代码编译为机器代码

     程序实际上被 “ 托管 ” 在公共语言运行库中。

    托管代码和非托管代码的区别:

      (1)编译运行过程不同

      (2)跨平台能力不同

      (3)程序性能不同

            eg:c/c++类语言,源码首先进过预处理,对头文件以及宏进行解析,经过编译器生成汇编代码,接着经过汇编,生成机器指令,最终将所有文件链接起来。这种方式优点在于直接生成机器码,能直接被机器有效识别,但不同机器识别的机器码不一样,所以跨平台性比较差。在.net  和 java中程序代码被编译为中间代码(IL),再由CLR 编译为机器代码。,一次编译,可以在不同设备运行。

           (4)释放资源的方式不同

          eg:在c/c++中资源都需要手动释放,比如,new了一个指针,用过之后需要delete掉,否则会造成内存泄漏。

                              在c#中,运行在.net平台上的代码,分配的资源一般会自动由平台的垃圾回收器释放,这样的资源就是托管资源。但由一些例外的资源,如System.IO.StreamReader等各种流、各种连接所分配的资源,需要显示调用Close()或Dispose()释放,这种资源就叫做非托管资源。

    在c# 中编写非托管代码,用unsafe声明

    unsafe
    {
    //非托管代码
    }
    

      

       

  • 相关阅读:
    如何使用Vue原生组件编译应用程序主题?这个工具不要错过
    BTC系统中具体的区块信息
    hash(哈希)
    比特币共识协议
    计算多分类softmax的loss function
    逻辑回归0.环境设定
    分布式共识
    Hash pointer(哈希指针)
    数字货币中经常出现的问题
    比特币激励机制
  • 原文地址:https://www.cnblogs.com/yxcn/p/13328531.html
Copyright © 2020-2023  润新知