zoukankan      html  css  js  c++  java
  • 【笔试&面试】C#的托管代码与非托管代码

    1. C#中的托管代码是什么?

    答:托管代码(ManagedCode)实际上就是中间语言(IL)代码。代码编写完毕后进行编译,此时编译器把代码编译成中间语言(IL),而不是能直接在你的电脑上运行的机器码。程序集(Assembly)的文件负责封装中间语言,程序集中包含了描述所创建的方法、类以及属性的所有元数据。托管代码在公共语言运行库(CLR)中运行。这个运行库给运行代码提供了多种服务,通常来说,公共语言运行库可以加载和验证程序集,并以此来保证中间语言的正确性。当某些方法被调用时,公共语言运行库把具体的方法编译成适合本地计算机运行的机器码,并且将编译好的机器码缓存起来,以备下次调用时使用。这个过程就是即时编译。 

        注意:程序实际上是被托管在公共语言运行库中。随着程序集的运行,公共语言运行库会持续地提供各种服务,例如内存管理、安全管理、线程管理等等。

        总结:

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

    托管代码也可以调用CLR的运行库服务和功能,比如GC、类型检查、安全支持等等。这些服务和功能提供独立与开发语言的、统一的Managed Code应用程序行为。

    2.   C#中的非托管代码是什么?

    答:非托管代码(UnmanagedCode)是指直接编译成目标计算机的机器码,这些代码只能运行在编译出这些代码的计算机上,或者是其他相同处理器或者几乎一样处理器的计算机上。非托管代码不能享受公共语言运行库所提供的一些服务,例如内存管理、安全管理等。 如果非托管代码需要进行内存管理等服务,就必须显式地调用操作系统的接口,通常非托管代码调用WindowsSDK所提供的API来实现内存管理。非托管程序也可以通过调用COM接口来获取操作系统服务。

        注意:C#Visual Studio平台的其他编程语言不一样的是,C#可以创建托管程序与非托管程序。当创建的项目选择名字以MFCATL或者Win32开头的项目类型,那么这个项目所产生的就是非托管程序。

        总结:

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

    非托管代码必须自己提供垃圾回收,类型检查,安全支持等等服务。

     

     

  • 相关阅读:
    查看sql 语句io执行情况
    MVC API 返回json 对象,使用netjson 返回
    微信支付——调用微信客户端支付之【服务端】开发详解
    React-Native hello word 搭建及新手常见问题
    PD中将Comment 从Name复制值
    Redis_DataType
    ConCurrent in Practice小记 (1)
    单链表是否存在环的检测(快慢指针法)
    开园第一天
    我希望……
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3278112.html
Copyright © 2011-2022 走看看