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

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

ID:17645656

大小:26.00 KB

页数:5页

时间:2018-09-04

托管代码和非托管代码的区别_第1页
托管代码和非托管代码的区别_第2页
托管代码和非托管代码的区别_第3页
托管代码和非托管代码的区别_第4页
托管代码和非托管代码的区别_第5页
资源描述:

《托管代码和非托管代码的区别》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、http://www.mykgc.cn/托管代码和非托管代码的区别什么是托管代码(managedcode)?托管代码是一microsoft的中间语言(IL),他主要的作用是在.NETFRAMEWORK的公共语言运行库(CLR)执行代码前去编译源代码,也就是说托管代码充当着翻译的作用,源代码在运行时分为两个阶段:1.源代码编译为托管代码,(所以源代码可以有很多种,如VB,C#,J#)2.托管代码编译为microsoft的平台专用语言。编译器把代码编译成中间语言(IL),而不是能直接在你的电脑上运行

2、的机器码。课工场中关村软件学院中间语言被封装在一个叫程序集(assembly)的文件中,程序集中包含了描述你所创建的类,方法和属性(例如安全需求)的所有元数据。你可以拷贝这个程序集到另一台服务器上部署它。托管代码在公共语言运行库(CLR)中运行。这个运行库给你的运行代码提供各种各样的服务,通常来说,他会加载和验证程序集,以此来保证中间语言的正确性。当某些方法被调用的时候,运行库把具体的方法编译成适合本地计算机运行的机械码,课工场中关村软件学院然后会把编译好的机械码缓存起来,以备下次调用。(这就是

3、即时编译)随着程序集的运行,运行库会持续地提供各种服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。VisualBasic5.1-9,,services,andmakethecitymoreattractive,strengtheningpublictransportinvestment,establishedasthebackboneoftheurbanrailtransitmulti-level,multi-functiona

4、lpublictransportsystem,thusprotectingtheregionalpositionandachievehttp://www.mykgc.cn/.NET和C#只能产生托管代码。如果你用这类语言写程序,那么所产生的代码就是托管代码。如果你愿意,VisualC++.NET可以生成托管代码。课工场中关村软件学院当你创建一个项目的时候,选择名字是以.Managed开头的项目类型。例如.ManagedC++application。什么是非托管代码(unmanagedcode)?

5、非托管代码就是在VisualStudio.NET2002发布之前所创建的代码。例如VisualBasic6,VisualC++6,最糟糕的是,连那些依然残存在你的硬盘中、拥有超过15年历史的陈旧C编译器所产生的代码都是非托管代码。课工场中关村软件学院托管代码直接编译成目标计算机的机械码,这些代码只能运行在编译出它们的计算机上,或者是其它相同处理器或者几乎一样处理器的计算机上。非托管代码不能享受一些运行库所提供的服务,例如安全和内存管理等。如果非托管代码需要进行内存管理等服务,就必须显式地调用操作

6、系统的接口,通常来说,它们会调用WindowsSDK所提供的API来实现。就最近的情况来看,非托管程序会通过COM接口来获取操作系统服务。跟VisualStudio平台的其他编程语言不一样,VisualC++可以创建非托管程序。当你创建一个项目,并且选择名字以MFC,ATL或者Win32开头的项目类型,那么这个项目所产生的就是非托管程序。区别:1、托管代码是一种中间语言,运行在CLR上;非托管代码被编译为机器码,运行在机器上。5.1-9,,services,andmakethecitymorea

7、ttractive,strengtheningpublictransportinvestment,establishedasthebackboneoftheurbanrailtransitmulti-level,multi-functionalpublictransportsystem,thusprotectingtheregionalpositionandachievehttp://www.mykgc.cn/2、托管代码独立于平台和语言,能更好的实现不同语言平台之间的兼容;非托管代码依赖于平台

8、和语言。3、托管代码可享受CLR提供的服务(如安全检测、垃圾回收等),不需要自己完成这些操作;非托管代码需要自己提供安全检测、垃圾回收等操作。托管代码就意味着托管数据?答案是否定的。对于VisualBasic和C#来说,生活是简单的,因为你没有其它选择。当你在那些语言里面声明一个类,那么这个类的实例会在托管堆中被创建,垃圾收集器(GC)会帮我们管理这些对象的回收。课工场中关村软件学院但是在VisualC++中,你有另一个选择。即使你正创建一个托管程序,你可以决定哪些类是托管类型,哪些类是非托管类

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。