zoukankan      html  css  js  c++  java
  • 托管代码和非托管代码

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

         非托管代码:在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务,它与托管代码不同,后者从公共语言运行库中获得这些服务,而非托管代码是在运行库之外运行的代码。例如COM 组件、ActiveX 接口和 Win32 API 函数都是非托管代码的示例。

    区别:

         1、托管代码是一种中间语言,运行在CLR上;

              非托管代码被编译为机器码,运行在机器上。

         2、托管代码独立于平台和语言,能更好的实现不同语言平台之间的兼容;

              非托管代码依赖于平台和语言。

         3、托管代码可享受CLR提供的服务(如安全检测、垃圾回收等),不需要自己完成这些操作;

              非托管代码需要自己提供安全检测、垃圾回收等操作。

     托管代码就意味着托管数据?答案是否定的。

          对于Visual Basic和C#来说,生活是简单的,因为你没有其它选择。当你在那些语言里面声明一个类,那么这个类的实例会在托管堆中被创建,垃圾收集器(GC)会帮我们管理这些对象的回收。但是在Visual C++中,你有另一个选择。即使你正创建一个托管程序,你可以决定哪些类是托管类型,哪些类是非托管类型的。

    这就是非托管类型:

    class Foo
    {
       private:
          int x;
       public:
          Foo(): x(0){}
          Foo(int xx): x(xx) {}
    };

    这就是托管类型

    __gc class Bar
    {
       private:
          int x;
       public:
          Bar(): x(0){}
          Bar(int xx): x(xx) {}
    };

          他们唯一的区别就是类Bar的定义中有__gc关键字。这个关键字会给代码带来巨大的区别。

  • 相关阅读:
    [bzoj3218] a+b problem [最小割+数据结构优化建图]
    [bzoj3456] 城市规划 [递推+多项式求逆]
    [ARC068F] Solitaire [DP]
    [bzoj3601] 一个人的数论 [莫比乌斯反演+高斯消元]
    [中山市选2011][bzoj2440] 完全平方数 [二分+莫比乌斯容斥]
    [bzoj2159] Crash的文明世界 [斯特林数+树形dp]
    [bzoj2839] 集合计数
    通用解题方法—回溯法
    分支限界法—单源最短路径问题
    分支限界法
  • 原文地址:https://www.cnblogs.com/lasthelloworld/p/4958987.html
Copyright © 2011-2022 走看看