没有合适的资源?快使用搜索试试~ 我知道了~
托管代码的优点 Microsoft中间语言与Java字节代码共享一种理念:它们都是一种低级语言 语法很简单 使用数字代码 而不是文本代码 可以非常快速地转换为内部机器码 对于代码来说 这种精心设计的通用语法 有很大的优点 ">托管代码的优点 Microsoft中间语言与Java字节代码共享一种理念:它们都是一种低级语言 语法很简单 使用数字代码 而不是文本代码 可以非常快速地转换为内部机器码 对于代码来说 这种精心设计的通用语法 有很大的优 [更多]
资源推荐
资源详情
资源评论
随着 Visual Studio .NET 2003 在四月 24 号的发布,许多开发者开始考虑使用一项被成
为托管代码的新技术。但是对于 C++开发者来说,可以会遇到一些麻烦。因为 C++是比
较特殊的。
什么是托管代码?
托管代码就是 Visual Basic .NET 和 C#编译器编译出来的代码。编译器把代码编译成中
间语言(IL),而不是能直接在你的电脑上运行的机器码。中间语言被封装在一个叫程序集
(assembly)的文件中,程序集中包含了描述你所创建的类,方法和属性(例如安全需求)的
所有元数据。这个程序集是.NET 世界中的一个一站式购物(译者注:就是程序集具有自描
述性)部署单元。你可以拷贝这个程序集到另一台服务器上部署它--通常来说,这个拷贝
的动作就是部署流程中唯一的一个操作。
托管代码在公共语言运行库(CLR)中运行。这个运行库给你的运行代码提供各种各样的服
务,通常来说,他会加载和验证程序集,以此来保证中间语言的正确性。当某些方法被调
用的时候,运行库把具体的方法编译成适合本地计算机运行的机械码,然后会把编译好的
机械码缓存起来,以备下次调用。(这就是即时编译)
随着程序集的运行,运行库会持续地提供各种服务,例如安全,内存管理,线程管理等等。
这个程序被“托管”在运行库中。
Visual Basic .NET 和 C#只能产生托管代码。如果你用这类语言写程序,那么所产生的代
码就是托管代码。如果你愿意,Visual C++ .NET 可以生成托管代码。当你创建一个项目
的时候,选择名字是以.Managed 开头的项目类型。例如.Managed C++
application。
什么是非托管代码?
非托管代码就是在 Visual Studio .NET 2002 发布之前所创建的代码。例如 Visual
Basic 6, Visual C++ 6, 最糟糕的是,连那些依然残存在你的硬盘中、拥有超过 15 年历
史的陈旧 C 编译器所产生的代码都是非托管代码。托管代码直接编译成目标计算机的机械
码,这些代码只能运行在编译出它们的计算机上,或者是其它相同处理器或者几乎一样处
理器的计算机上。非托管代码不能享受一些运行库所提供的服务,例如安全和内存管理等。
如果非托管代码需要进行内存管理等服务,就必须显式地调用操作系统的接口,通常来说,
它们会调用 Windows SDK 所提供的 API 来实现。就最近的情况来看,非托管程序会通过
COM 接口来获取操作系统服务。
跟 Visual Studio 平台的其他编程语言不一样,Visual C++可以创建非托管程序。当你
创建一个项目,并且选择名字以 MFC,ATL 或者 Win32 开头的项目类型,那么这个项目
所产生的就是非托管程序。
这样子会导致一些混淆:当你创建一个托管的 C++程序,那么构建出来的是一个中间语
言程序集和一个扩展名为.exe 的可执行文件。当你创建一个 MFC 程序,构建出来是一个
Windows 原生代码的可执行文件,这个文件的扩展名也是.exe。这两个文件的内部结构
是完全不一样的。你可以用中间语言反汇编器(ildasm)来查看程序集的内部以及中间语言
的元数据。如果尝试用中间语言反汇编器来查看一个非托管可执行文件,那么改反汇编器
会告诉你这个可执行文件没有包含一个合法的 CLR 头,所以不能被反编译。可见,这两个
文件虽然有相同的扩展名,但是它们是完全不一样的。
原生代码又是什么呢?
资源评论
viki00
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功