托管代码、非托管代码
来源:百度文库 编辑:神马文学网 时间:2024/04/20 01:21:04
请大家讨论下,托管代码和非托管代码的区别,谢谢!
非托管代码直接交给 CPU 执行.
VES (Virtual Execution System)
微软的实现叫 Microsoft Common Language Runtime(CLR)
是运行在 windows 平台上的.
最近调试一些程序总是因为委托使用不当,
导致系统崩溃,提示托管代码方面的错误提示...
编译器和工具公开运行库的功能并使您能够编写受益于此托管执行环境的代码。使用针对运行库的语言编译器开发的代码称为托管代码;使用托管代码有很多好处,因为它具有诸多功能,如跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
若要使运行库能够向托管代码提供服务,语言编译器必须发出对代码中的类型、成员和引用进行描述的元数据。元数据与代码一起存储;每个可加载的公共语言运行库可移植可执行 (PE) 文件都包含元数据。运行库使用元数据完成以下任务:查找和加载类,在内存中对实例进行布局,解析方法调用,生成本机代码,强制安全性,以及设置运行时上下文边界。
运行库自动处理对象布局和管理对对象的引用,当不再使用对象时释放它们。其生存期以这种方式来管理的对象称为托管数据。垃圾回收消除了内存泄漏以及其他一些常见的编程错误。如果代码是托管的,则可以在 .NET Framework 应用程序中使用托管数据、非托管数据或者使用这两者。由于语言编译器提供它们自己的类型(如基元类型),因此可能并不总是知道(或需要知道)数据是否是托管的。
公共语言运行库使设计其对象能够跨语言交互的组件和应用程序变得很容易。用不同语言编写的对象可以互相通信,并且它们的行为可以紧密集成。例如,可以定义一个类,然后使用不同的语言从原始类派生类或调用原始类的方法。还可以将类的实例传递到用不同的语言编写的类的方法。这种跨语言集成之所以成为可能,是因为针对运行库的语言编译器和工具使用由运行库定义的通用类型系统,而且它们遵循运行库关于定义新类型以及创建、使用、保持和绑定到类型的规则。
所有托管组件都携带有关生成所基于的组件和资源的信息,作为其元数据的一部分。运行库使用这些信息确保组件或应用程序具有它需要的所有内容的指定版本,这使代码不太可能由于某些未满足的依赖项而中断。注册信息和状态数据不再保存在注册表(在注册表中建立和维护它们会很困难)中。相反,有关您定义的类型(和它们的依赖项)的信息作为元数据与代码存储在一起,这样大大降低了组件复制和移除任务的复杂性。
语言编译器和工具按照对于开发人员来说有用而直观的方式来公开运行库的功能。这意味着运行库的某些功能可能在一个环境中比在另一个环境中更引人注意。您对运行库的体验取决于您使用的语言编译器或工具。例如,如果您是一位 Visual Basic 开发人员,您可能会注意到有了公共语言运行库,Visual Basic 语言的面向对象的功能比以前多了。下面是运行库的一些优点:
性能改进。
能够轻松使用用其他语言开发的组件。
类库提供的可扩展类型。
新的语言功能,如面向对象的编程的继承、接口和重载;允许创建多线程的可缩放应用程序的显式自由线程处理支持;结构化异常处理和自定义属性支持。
如果使用 Microsoft® Visual C++® .NET,则可以使用 C++ 托管扩展来编写托管代码。C++ 托管扩展提供了托管执行环境以及对您所熟悉的强大功能和富于表现力的数据类型的访问等优点。其他运行库功能包括:
跨语言集成,特别是跨语言继承。
垃圾回收,它管理对象生存期,使引用计数变得不再必要。
自我描述的对象,它使得使用接口定义语言 (IDL) 不再是必要的。
编译一次即可在任何支持运行库的 CPU 和操作系统上运行的能力。
还可以使用 C# 语言编写托管代码。C# 语言提供了下列优点:
完全面向对象的设计。
非常强的类型安全。
很好地融合了 Visual Basic 的简明性和 C++ 的强大功能。
垃圾回收。
类似于 C 和 C++ 的语法和关键字。
使用委托而不是函数指针,从而增强了类型安全和安全性。函数指针通过 unsafe C# 关键字和 C# 编译器 (Csc.exe) 的 /unsafe 选项可用于非托管代码和数据。
执行效率
http://www.cnblogs.com/wuchang/archive/2006/12/07/584997.html
非托管代码相当于 本机CPU指令序列
.NET 的 CLR 相当于Java解释器
托管代码 (managed code)
由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。
托管代码是可以使用20多种支持Microsoft .NET Framework的高级语言编写的代码,它们包括:C#, J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及C++。所有的语言共享统一的类库集合,并能被编码成为中间语言(IL)。运行库编译器(runtime-aware ompiler)在托管执行环境下编译中间语言(IL)使之成为本地可执行的代码,并使用数组边界和索引检查,异常处理,垃圾回收等手段确保类型的安全。
在托管执行环境中使用托管代码及其编译,可以避免许多典型的导致安全黑洞和不稳定程序的编程错误。同样,许多不可靠的设计也自动的被增强了安全性,例如 类型安全检查,内存管理和释放无效对象。程序员可以花更多的精力关注程序的应用逻辑设计并可以减少代码的编写量。这就意味着更短的开发时间和更健壮的程序。
非托管代码 (unmanaged code)
在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。
什么样的代码是托管代码?
什么样的代码是非托管代码?
这个问题我也不清楚,还望大虾们指教!
up。。。
学习
区别如下
代码模型:非托管代码通过接口来进行通信,百托管代码则不必经过接口,而是直接传递数据;
错误处理机制:COM方法通常返回HRESULT,表示调用成功还是失败。托管代码是通过一场机制来进行错误处理;
标识:GUID标识特定的非托管类型,但并不是提供类型的位置信息。托管类型的名称不但包含类型名,而且还包含唯一的程序集名称。因为程序集名唯一的标识类型,所以可以跨越多个程序集来重用某一类型名称;
类型定义:COM组件的类型库只包含公共类型,并且是可选的。在托管编程模式中,类型信息对于所有类型来说都是强制性的。互操作服务提供了用于将类型库转换为程序集中的元数据,以及将原数据转换为类型库的工具;
类型安全:非托管编译器不会对指针类型提供任何类型检查,所以会使代码很容易受到潜在的危害的影响。在通常情况下,托管代码需要更高级的新人级别。程序员虽然可以继续在托管代码的不安全中使用的指针,但是因为不安全行为受到一些限制;
版本控制:COM接口是不可变的,如果要更改接口,则必须使用新的GUID对其进行重命名。托管类型可以使用同一名称进行深化。
名称相同的两个类型,在托管代码和非托管代码之间是不同的,在不同的语言之间也是不同的,所以在进行代码互操作时,必须进行封装处理。大多数的数据类型在托管和非托管内存中都具有公共表示形式。通过使用.Net框架的互操作机制的封送拆收器,可以处理这些这些同名但不同意义的类型。如果类型不明确,或在托管内存中不存在这些类型,则必须个人编码,并向封送拆收器提供如何封送不明确类型的显示指令,以显式地进行封送处理。
VES (Virtual Execution System)
微软的实现叫 Microsoft Common Language Runtime(CLR)
是运行在 windows 平台上的.
最近调试一些程序总是因为委托使用不当,
导致系统崩溃,提示托管代码方面的错误提示...
非托管代码直接交给 CPU 执行.
编译器和工具公开运行库的功能并使您能够编写受益于此托管执行环境的代码。使用针对运行库的语言编译器开发的代码称为托管代码;使用托管代码有很多好处,因为它具有诸多功能,如跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
若要使运行库能够向托管代码提供服务,语言编译器必须发出对代码中的类型、成员和引用进行描述的元数据。元数据与代码一起存储;每个可加载的公共语言运行库可移植可执行 (PE) 文件都包含元数据。运行库使用元数据完成以下任务:查找和加载类,在内存中对实例进行布局,解析方法调用,生成本机代码,强制安全性,以及设置运行时上下文边界。
运行库自动处理对象布局和管理对对象的引用,当不再使用对象时释放它们。其生存期以这种方式来管理的对象称为托管数据。垃圾回收消除了内存泄漏以及其他一些常见的编程错误。如果代码是托管的,则可以在 .NET Framework 应用程序中使用托管数据、非托管数据或者使用这两者。由于语言编译器提供它们自己的类型(如基元类型),因此可能并不总是知道(或需要知道)数据是否是托管的。
公共语言运行库使设计其对象能够跨语言交互的组件和应用程序变得很容易。用不同语言编写的对象可以互相通信,并且它们的行为可以紧密集成。例如,可以定义一个类,然后使用不同的语言从原始类派生类或调用原始类的方法。还可以将类的实例传递到用不同的语言编写的类的方法。这种跨语言集成之所以成为可能,是因为针对运行库的语言编译器和工具使用由运行库定义的通用类型系统,而且它们遵循运行库关于定义新类型以及创建、使用、保持和绑定到类型的规则。
所有托管组件都携带有关生成所基于的组件和资源的信息,作为其元数据的一部分。运行库使用这些信息确保组件或应用程序具有它需要的所有内容的指定版本,这使代码不太可能由于某些未满足的依赖项而中断。注册信息和状态数据不再保存在注册表(在注册表中建立和维护它们会很困难)中。相反,有关您定义的类型(和它们的依赖项)的信息作为元数据与代码存储在一起,这样大大降低了组件复制和移除任务的复杂性。
语言编译器和工具按照对于开发人员来说有用而直观的方式来公开运行库的功能。这意味着运行库的某些功能可能在一个环境中比在另一个环境中更引人注意。您对运行库的体验取决于您使用的语言编译器或工具。例如,如果您是一位 Visual Basic 开发人员,您可能会注意到有了公共语言运行库,Visual Basic 语言的面向对象的功能比以前多了。下面是运行库的一些优点:
性能改进。
能够轻松使用用其他语言开发的组件。
类库提供的可扩展类型。
新的语言功能,如面向对象的编程的继承、接口和重载;允许创建多线程的可缩放应用程序的显式自由线程处理支持;结构化异常处理和自定义属性支持。
如果使用 Microsoft® Visual C++® .NET,则可以使用 C++ 托管扩展来编写托管代码。C++ 托管扩展提供了托管执行环境以及对您所熟悉的强大功能和富于表现力的数据类型的访问等优点。其他运行库功能包括:
跨语言集成,特别是跨语言继承。
垃圾回收,它管理对象生存期,使引用计数变得不再必要。
自我描述的对象,它使得使用接口定义语言 (IDL) 不再是必要的。
编译一次即可在任何支持运行库的 CPU 和操作系统上运行的能力。
还可以使用 C# 语言编写托管代码。C# 语言提供了下列优点:
完全面向对象的设计。
非常强的类型安全。
很好地融合了 Visual Basic 的简明性和 C++ 的强大功能。
垃圾回收。
类似于 C 和 C++ 的语法和关键字。
使用委托而不是函数指针,从而增强了类型安全和安全性。函数指针通过 unsafe C# 关键字和 C# 编译器 (Csc.exe) 的 /unsafe 选项可用于非托管代码和数据。
执行效率
http://www.cnblogs.com/wuchang/archive/2006/12/07/584997.html
VES (Virtual Execution System)
微软的实现叫 Microsoft Common Language Runtime(CLR)
是运行在 windows 平台上的.
托管代码的堆上的垃圾内存可由GC自动回收,非托管代码中堆上的垃圾内存必须程序员自己负责释放、回收
非托管代码相当于 本机CPU指令序列
.NET 的 CLR 相当于Java解释器
托管代码 (managed code)
由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。
托管代码是可以使用20多种支持Microsoft .NET Framework的高级语言编写的代码,它们包括:C#, J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及C++。所有的语言共享统一的类库集合,并能被编码成为中间语言(IL)。运行库编译器(runtime-aware ompiler)在托管执行环境下编译中间语言(IL)使之成为本地可执行的代码,并使用数组边界和索引检查,异常处理,垃圾回收等手段确保类型的安全。
在托管执行环境中使用托管代码及其编译,可以避免许多典型的导致安全黑洞和不稳定程序的编程错误。同样,许多不可靠的设计也自动的被增强了安全性,例如 类型安全检查,内存管理和释放无效对象。程序员可以花更多的精力关注程序的应用逻辑设计并可以减少代码的编写量。这就意味着更短的开发时间和更健壮的程序。
非托管代码 (unmanaged code)
在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。
编译器和工具公开运行库的功能并使您能够编写受益于此托管执行环境的代码。使用针对运行库的语言编译器开发的代码称为托管代码;使用托管代码有很多好处,因为它具有诸多功能,如跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
若要使运行库能够向托管代码提供服务,语言编译器必须发出对代码中的类型、成员和引用进行描述的元数据。元数据与代码一起存储;每个可加载的公共语言运行库可移植可执行 (PE) 文件都包含元数据。运行库使用元数据完成以下任务:查找和加载类,在内存中对实例进行布局,解析方法调用,生成本机代码,强制安全性,以及设置运行时上下文边界。
运行库自动处理对象布局和管理对对象的引用,当不再使用对象时释放它们。其生存期以这种方式来管理的对象称为托管数据。垃圾回收消除了内存泄漏以及其他一些常见的编程错误。如果代码是托管的,则可以在 .NET Framework 应用程序中使用托管数据、非托管数据或者使用这两者。由于语言编译器提供它们自己的类型(如基元类型),因此可能并不总是知道(或需要知道)数据是否是托管的。
公共语言运行库使设计其对象能够跨语言交互的组件和应用程序变得很容易。用不同语言编写的对象可以互相通信,并且它们的行为可以紧密集成。例如,可以定义一个类,然后使用不同的语言从原始类派生类或调用原始类的方法。还可以将类的实例传递到用不同的语言编写的类的方法。这种跨语言集成之所以成为可能,是因为针对运行库的语言编译器和工具使用由运行库定义的通用类型系统,而且它们遵循运行库关于定义新类型以及创建、使用、保持和绑定到类型的规则。
所有托管组件都携带有关生成所基于的组件和资源的信息,作为其元数据的一部分。运行库使用这些信息确保组件或应用程序具有它需要的所有内容的指定版本,这使代码不太可能由于某些未满足的依赖项而中断。注册信息和状态数据不再保存在注册表(在注册表中建立和维护它们会很困难)中。相反,有关您定义的类型(和它们的依赖项)的信息作为元数据与代码存储在一起,这样大大降低了组件复制和移除任务的复杂性。
语言编译器和工具按照对于开发人员来说有用而直观的方式来公开运行库的功能。这意味着运行库的某些功能可能在一个环境中比在另一个环境中更引人注意。您对运行库的体验取决于您使用的语言编译器或工具。例如,如果您是一位 Visual Basic 开发人员,您可能会注意到有了公共语言运行库,Visual Basic 语言的面向对象的功能比以前多了。下面是运行库的一些优点:
性能改进。
能够轻松使用用其他语言开发的组件。
类库提供的可扩展类型。
新的语言功能,如面向对象的编程的继承、接口和重载;允许创建多线程的可缩放应用程序的显式自由线程处理支持;结构化异常处理和自定义属性支持。
如果使用 Microsoft® Visual C++® .NET,则可以使用 C++ 托管扩展来编写托管代码。C++ 托管扩展提供了托管执行环境以及对您所熟悉的强大功能和富于表现力的数据类型的访问等优点。其他运行库功能包括:
跨语言集成,特别是跨语言继承。
垃圾回收,它管理对象生存期,使引用计数变得不再必要。
自我描述的对象,它使得使用接口定义语言 (IDL) 不再是必要的。
编译一次即可在任何支持运行库的 CPU 和操作系统上运行的能力。
还可以使用 C# 语言编写托管代码。C# 语言提供了下列优点:
完全面向对象的设计。
非常强的类型安全。
很好地融合了 Visual Basic 的简明性和 C++ 的强大功能。
垃圾回收。
类似于 C 和 C++ 的语法和关键字。
使用委托而不是函数指针,从而增强了类型安全和安全性。函数指针通过 unsafe C# 关键字和 C# 编译器 (Csc.exe) 的 /unsafe 选项可用于非托管代码和数据。
什么样的代码是托管代码?
什么样的代码是非托管代码?
这个问题我也不清楚,还望大虾们指教!
up。。。
执行效率
http://www.cnblogs.com/wuchang/archive/2006/12/07/584997.html
学习
非托管代码相当于 本机CPU指令序列
.NET 的 CLR 相当于Java解释器
这些东西MSDN上都写得很清楚的,如果真想深入了解的话LZ可以看看CLR via C#、.net框架设计、Effective C#之类的书籍
托管代码 (managed code)
由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。
托管代码是可以使用20多种支持Microsoft .NET Framework的高级语言编写的代码,它们包括:C#, J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及C++。所有的语言共享统一的类库集合,并能被编码成为中间语言(IL)。运行库编译器(runtime-aware ompiler)在托管执行环境下编译中间语言(IL)使之成为本地可执行的代码,并使用数组边界和索引检查,异常处理,垃圾回收等手段确保类型的安全。
在托管执行环境中使用托管代码及其编译,可以避免许多典型的导致安全黑洞和不稳定程序的编程错误。同样,许多不可靠的设计也自动的被增强了安全性,例如 类型安全检查,内存管理和释放无效对象。程序员可以花更多的精力关注程序的应用逻辑设计并可以减少代码的编写量。这就意味着更短的开发时间和更健壮的程序。
非托管代码 (unmanaged code)
在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。
区别如下
代码模型:非托管代码通过接口来进行通信,百托管代码则不必经过接口,而是直接传递数据;
错误处理机制:COM方法通常返回HRESULT,表示调用成功还是失败。托管代码是通过一场机制来进行错误处理;
标识:GUID标识特定的非托管类型,但并不是提供类型的位置信息。托管类型的名称不但包含类型名,而且还包含唯一的程序集名称。因为程序集名唯一的标识类型,所以可以跨越多个程序集来重用某一类型名称;
类型定义:COM组件的类型库只包含公共类型,并且是可选的。在托管编程模式中,类型信息对于所有类型来说都是强制性的。互操作服务提供了用于将类型库转换为程序集中的元数据,以及将原数据转换为类型库的工具;
类型安全:非托管编译器不会对指针类型提供任何类型检查,所以会使代码很容易受到潜在的危害的影响。在通常情况下,托管代码需要更高级的新人级别。程序员虽然可以继续在托管代码的不安全中使用的指针,但是因为不安全行为受到一些限制;
版本控制:COM接口是不可变的,如果要更改接口,则必须使用新的GUID对其进行重命名。托管类型可以使用同一名称进行深化。
名称相同的两个类型,在托管代码和非托管代码之间是不同的,在不同的语言之间也是不同的,所以在进行代码互操作时,必须进行封装处理。大多数的数据类型在托管和非托管内存中都具有公共表示形式。通过使用.Net框架的互操作机制的封送拆收器,可以处理这些这些同名但不同意义的类型。如果类型不明确,或在托管内存中不存在这些类型,则必须个人编码,并向封送拆收器提供如何封送不明确类型的显示指令,以显式地进行封送处理。
区别如下
代码模型:非托管代码通过接口来进行通信,百托管代码则不必经过接口,而是直接传递数据;
错误处理机制:COM方法通常返回HRESULT,表示调用成功还是失败。托管代码是通过一场机制来进行错误处理;
标识:GUID标识特定的非托管类型,但并不是提供类型的位置信息。托管类型的名称不但包含类型名,而且还包含唯一的程序集名称。因为程序集名唯一的标识类型,所以可以跨越多个程序集来重用某一类型名称;
类型定义:COM组件的类型库只包含公共类型,并且是可选的。在托管编程模式中,类型信息对于所有类型来说都是强制性的。互操作服务提供了用于将类型库转换为程序集中的元数据,以及将原数据转换为类型库的工具;
类型安全:非托管编译器不会对指针类型提供任何类型检查,所以会使代码很容易受到潜在的危害的影响。在通常情况下,托管代码需要更高级的新人级别。程序员虽然可以继续在托管代码的不安全中使用的指针,但是因为不安全行为受到一些限制;
版本控制:COM接口是不可变的,如果要更改接口,则必须使用新的GUID对其进行重命名。托管类型可以使用同一名称进行深化。
名称相同的两个类型,在托管代码和非托管代码之间是不同的,在不同的语言之间也是不同的,所以在进行代码互操作时,必须进行封装处理。大多数的数据类型在托管和非托管内存中都具有公共表示形式。通过使用.Net框架的互操作机制的封送拆收器,可以处理这些这些同名但不同意义的类型。如果类型不明确,或在托管内存中不存在这些类型,则必须个人编码,并向封送拆收器提供如何封送不明确类型的显示指令,以显式地进行封送处理。
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- vrhero
- (若批评不自由则赞美无意义...)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- vrhero
- (若批评不自由则赞美无意义...)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- Dobzhansky
- (Gecko - 么个?则个!)
- 等 级:
非托管代码直接交给 CPU 执行.
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- Dobzhansky
- (Gecko - 么个?则个!)
- 等 级:
VES (Virtual Execution System)
微软的实现叫 Microsoft Common Language Runtime(CLR)
是运行在 windows 平台上的.
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- jscn123789abc
- (aaa)
- 等 级:
最近调试一些程序总是因为委托使用不当,
导致系统崩溃,提示托管代码方面的错误提示...
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- agentianle
- (天乐)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- hangang7403
- (学习者)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- LJH20002004200820131
- (刘旒)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- amandag
- (高歌)
- 等 级:
-
2
更多勋章
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- yuanmanguo
- (godogoflive)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- yuanmanguo
- (godogoflive)
- 等 级:
编译器和工具公开运行库的功能并使您能够编写受益于此托管执行环境的代码。使用针对运行库的语言编译器开发的代码称为托管代码;使用托管代码有很多好处,因为它具有诸多功能,如跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
若要使运行库能够向托管代码提供服务,语言编译器必须发出对代码中的类型、成员和引用进行描述的元数据。元数据与代码一起存储;每个可加载的公共语言运行库可移植可执行 (PE) 文件都包含元数据。运行库使用元数据完成以下任务:查找和加载类,在内存中对实例进行布局,解析方法调用,生成本机代码,强制安全性,以及设置运行时上下文边界。
运行库自动处理对象布局和管理对对象的引用,当不再使用对象时释放它们。其生存期以这种方式来管理的对象称为托管数据。垃圾回收消除了内存泄漏以及其他一些常见的编程错误。如果代码是托管的,则可以在 .NET Framework 应用程序中使用托管数据、非托管数据或者使用这两者。由于语言编译器提供它们自己的类型(如基元类型),因此可能并不总是知道(或需要知道)数据是否是托管的。
公共语言运行库使设计其对象能够跨语言交互的组件和应用程序变得很容易。用不同语言编写的对象可以互相通信,并且它们的行为可以紧密集成。例如,可以定义一个类,然后使用不同的语言从原始类派生类或调用原始类的方法。还可以将类的实例传递到用不同的语言编写的类的方法。这种跨语言集成之所以成为可能,是因为针对运行库的语言编译器和工具使用由运行库定义的通用类型系统,而且它们遵循运行库关于定义新类型以及创建、使用、保持和绑定到类型的规则。
所有托管组件都携带有关生成所基于的组件和资源的信息,作为其元数据的一部分。运行库使用这些信息确保组件或应用程序具有它需要的所有内容的指定版本,这使代码不太可能由于某些未满足的依赖项而中断。注册信息和状态数据不再保存在注册表(在注册表中建立和维护它们会很困难)中。相反,有关您定义的类型(和它们的依赖项)的信息作为元数据与代码存储在一起,这样大大降低了组件复制和移除任务的复杂性。
语言编译器和工具按照对于开发人员来说有用而直观的方式来公开运行库的功能。这意味着运行库的某些功能可能在一个环境中比在另一个环境中更引人注意。您对运行库的体验取决于您使用的语言编译器或工具。例如,如果您是一位 Visual Basic 开发人员,您可能会注意到有了公共语言运行库,Visual Basic 语言的面向对象的功能比以前多了。下面是运行库的一些优点:
性能改进。
能够轻松使用用其他语言开发的组件。
类库提供的可扩展类型。
新的语言功能,如面向对象的编程的继承、接口和重载;允许创建多线程的可缩放应用程序的显式自由线程处理支持;结构化异常处理和自定义属性支持。
如果使用 Microsoft® Visual C++® .NET,则可以使用 C++ 托管扩展来编写托管代码。C++ 托管扩展提供了托管执行环境以及对您所熟悉的强大功能和富于表现力的数据类型的访问等优点。其他运行库功能包括:
跨语言集成,特别是跨语言继承。
垃圾回收,它管理对象生存期,使引用计数变得不再必要。
自我描述的对象,它使得使用接口定义语言 (IDL) 不再是必要的。
编译一次即可在任何支持运行库的 CPU 和操作系统上运行的能力。
还可以使用 C# 语言编写托管代码。C# 语言提供了下列优点:
完全面向对象的设计。
非常强的类型安全。
很好地融合了 Visual Basic 的简明性和 C++ 的强大功能。
垃圾回收。
类似于 C 和 C++ 的语法和关键字。
使用委托而不是函数指针,从而增强了类型安全和安全性。函数指针通过 unsafe C# 关键字和 C# 编译器 (Csc.exe) 的 /unsafe 选项可用于非托管代码和数据。
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- wuyq11
- (人生如梦)
- 等 级:
-
2
16
3
更多勋章
执行效率
http://www.cnblogs.com/wuchang/archive/2006/12/07/584997.html
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- JaggerLee
- (在山的那边海的那边有一群程序员)
- 等 级:
非托管代码相当于 本机CPU指令序列
.NET 的 CLR 相当于Java解释器
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- gjl_gjl
- (Java?.net?)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- wangping_li
- (总有一天,我星球上的人会来接我)
- 等 级:
托管代码 (managed code)
由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。
托管代码是可以使用20多种支持Microsoft .NET Framework的高级语言编写的代码,它们包括:C#, J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及C++。所有的语言共享统一的类库集合,并能被编码成为中间语言(IL)。运行库编译器(runtime-aware ompiler)在托管执行环境下编译中间语言(IL)使之成为本地可执行的代码,并使用数组边界和索引检查,异常处理,垃圾回收等手段确保类型的安全。
在托管执行环境中使用托管代码及其编译,可以避免许多典型的导致安全黑洞和不稳定程序的编程错误。同样,许多不可靠的设计也自动的被增强了安全性,例如 类型安全检查,内存管理和释放无效对象。程序员可以花更多的精力关注程序的应用逻辑设计并可以减少代码的编写量。这就意味着更短的开发时间和更健壮的程序。
非托管代码 (unmanaged code)
在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- heart_string
- 等 级:
什么样的代码是托管代码?
什么样的代码是非托管代码?
这个问题我也不清楚,还望大虾们指教!
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- yagebu1983
- (丐帮帮主)
- 等 级:
up。。。
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- jscn123789abc
- (aaa)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- jscn123789abc
- (aaa)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- Wind_08
- (brook)
- 等 级:
学习
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- typeof
- (null)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- fanbo
- (天天编程)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- Jueyoung
- (早上可以吃鸡蛋, 喝粥了!)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- jscn123789abc
- (aaa)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- start55
- (start55)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- fengqipiaobo
- (风起漂泊)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- niit_zc
- (绝对零度)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- laichunlin
- (小赖)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- xiatiandetonghua
- (xiatiandetonghua)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- handong520
- (寒冬)
- 等 级:
区别如下
代码模型:非托管代码通过接口来进行通信,百托管代码则不必经过接口,而是直接传递数据;
错误处理机制:COM方法通常返回HRESULT,表示调用成功还是失败。托管代码是通过一场机制来进行错误处理;
标识:GUID标识特定的非托管类型,但并不是提供类型的位置信息。托管类型的名称不但包含类型名,而且还包含唯一的程序集名称。因为程序集名唯一的标识类型,所以可以跨越多个程序集来重用某一类型名称;
类型定义:COM组件的类型库只包含公共类型,并且是可选的。在托管编程模式中,类型信息对于所有类型来说都是强制性的。互操作服务提供了用于将类型库转换为程序集中的元数据,以及将原数据转换为类型库的工具;
类型安全:非托管编译器不会对指针类型提供任何类型检查,所以会使代码很容易受到潜在的危害的影响。在通常情况下,托管代码需要更高级的新人级别。程序员虽然可以继续在托管代码的不安全中使用的指针,但是因为不安全行为受到一些限制;
版本控制:COM接口是不可变的,如果要更改接口,则必须使用新的GUID对其进行重命名。托管类型可以使用同一名称进行深化。
名称相同的两个类型,在托管代码和非托管代码之间是不同的,在不同的语言之间也是不同的,所以在进行代码互操作时,必须进行封装处理。大多数的数据类型在托管和非托管内存中都具有公共表示形式。通过使用.Net框架的互操作机制的封送拆收器,可以处理这些这些同名但不同意义的类型。如果类型不明确,或在托管内存中不存在这些类型,则必须个人编码,并向封送拆收器提供如何封送不明确类型的显示指令,以显式地进行封送处理。
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- gorllen
- (gorllen)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- ymenghong
- (ymenghong)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
请大家讨论下,托管代码和非托管代码的区别,谢谢!
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
托管代码、非托管代码在MSDN讲的很细
请大家讨论下,托管代码和非托管代码的区别,谢谢!
- Dobzhansky
- (Gecko - 么个?则个!)
- 等 级:
VES (Virtual Execution System)
微软的实现叫 Microsoft Common Language Runtime(CLR)
是运行在 windows 平台上的.
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- jscn123789abc
- (aaa)
- 等 级:
最近调试一些程序总是因为委托使用不当,
导致系统崩溃,提示托管代码方面的错误提示...
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- agentianle
- (天乐)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- hangang7403
- (学习者)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- LJH20002004200820131
- (刘旒)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- amandag
- (高歌)
- 等 级:
-
2
更多勋章
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- yuanmanguo
- (godogoflive)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
非托管代码直接交给 CPU 执行.
- yuanmanguo
- (godogoflive)
- 等 级:
编译器和工具公开运行库的功能并使您能够编写受益于此托管执行环境的代码。使用针对运行库的语言编译器开发的代码称为托管代码;使用托管代码有很多好处,因为它具有诸多功能,如跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
若要使运行库能够向托管代码提供服务,语言编译器必须发出对代码中的类型、成员和引用进行描述的元数据。元数据与代码一起存储;每个可加载的公共语言运行库可移植可执行 (PE) 文件都包含元数据。运行库使用元数据完成以下任务:查找和加载类,在内存中对实例进行布局,解析方法调用,生成本机代码,强制安全性,以及设置运行时上下文边界。
运行库自动处理对象布局和管理对对象的引用,当不再使用对象时释放它们。其生存期以这种方式来管理的对象称为托管数据。垃圾回收消除了内存泄漏以及其他一些常见的编程错误。如果代码是托管的,则可以在 .NET Framework 应用程序中使用托管数据、非托管数据或者使用这两者。由于语言编译器提供它们自己的类型(如基元类型),因此可能并不总是知道(或需要知道)数据是否是托管的。
公共语言运行库使设计其对象能够跨语言交互的组件和应用程序变得很容易。用不同语言编写的对象可以互相通信,并且它们的行为可以紧密集成。例如,可以定义一个类,然后使用不同的语言从原始类派生类或调用原始类的方法。还可以将类的实例传递到用不同的语言编写的类的方法。这种跨语言集成之所以成为可能,是因为针对运行库的语言编译器和工具使用由运行库定义的通用类型系统,而且它们遵循运行库关于定义新类型以及创建、使用、保持和绑定到类型的规则。
所有托管组件都携带有关生成所基于的组件和资源的信息,作为其元数据的一部分。运行库使用这些信息确保组件或应用程序具有它需要的所有内容的指定版本,这使代码不太可能由于某些未满足的依赖项而中断。注册信息和状态数据不再保存在注册表(在注册表中建立和维护它们会很困难)中。相反,有关您定义的类型(和它们的依赖项)的信息作为元数据与代码存储在一起,这样大大降低了组件复制和移除任务的复杂性。
语言编译器和工具按照对于开发人员来说有用而直观的方式来公开运行库的功能。这意味着运行库的某些功能可能在一个环境中比在另一个环境中更引人注意。您对运行库的体验取决于您使用的语言编译器或工具。例如,如果您是一位 Visual Basic 开发人员,您可能会注意到有了公共语言运行库,Visual Basic 语言的面向对象的功能比以前多了。下面是运行库的一些优点:
性能改进。
能够轻松使用用其他语言开发的组件。
类库提供的可扩展类型。
新的语言功能,如面向对象的编程的继承、接口和重载;允许创建多线程的可缩放应用程序的显式自由线程处理支持;结构化异常处理和自定义属性支持。
如果使用 Microsoft® Visual C++® .NET,则可以使用 C++ 托管扩展来编写托管代码。C++ 托管扩展提供了托管执行环境以及对您所熟悉的强大功能和富于表现力的数据类型的访问等优点。其他运行库功能包括:
跨语言集成,特别是跨语言继承。
垃圾回收,它管理对象生存期,使引用计数变得不再必要。
自我描述的对象,它使得使用接口定义语言 (IDL) 不再是必要的。
编译一次即可在任何支持运行库的 CPU 和操作系统上运行的能力。
还可以使用 C# 语言编写托管代码。C# 语言提供了下列优点:
完全面向对象的设计。
非常强的类型安全。
很好地融合了 Visual Basic 的简明性和 C++ 的强大功能。
垃圾回收。
类似于 C 和 C++ 的语法和关键字。
使用委托而不是函数指针,从而增强了类型安全和安全性。函数指针通过 unsafe C# 关键字和 C# 编译器 (Csc.exe) 的 /unsafe 选项可用于非托管代码和数据。
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- wuyq11
- (人生如梦)
- 等 级:
-
2
16
3
更多勋章
执行效率
http://www.cnblogs.com/wuchang/archive/2006/12/07/584997.html
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
VES (Virtual Execution System)
微软的实现叫 Microsoft Common Language Runtime(CLR)
是运行在 windows 平台上的.
托管代码的堆上的垃圾内存可由GC自动回收,非托管代码中堆上的垃圾内存必须程序员自己负责释放、回收
- JaggerLee
- (在山的那边海的那边有一群程序员)
- 等 级:
非托管代码相当于 本机CPU指令序列
.NET 的 CLR 相当于Java解释器
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- gjl_gjl
- (Java?.net?)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- wangping_li
- (总有一天,我星球上的人会来接我)
- 等 级:
托管代码 (managed code)
由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。
托管代码是可以使用20多种支持Microsoft .NET Framework的高级语言编写的代码,它们包括:C#, J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及C++。所有的语言共享统一的类库集合,并能被编码成为中间语言(IL)。运行库编译器(runtime-aware ompiler)在托管执行环境下编译中间语言(IL)使之成为本地可执行的代码,并使用数组边界和索引检查,异常处理,垃圾回收等手段确保类型的安全。
在托管执行环境中使用托管代码及其编译,可以避免许多典型的导致安全黑洞和不稳定程序的编程错误。同样,许多不可靠的设计也自动的被增强了安全性,例如 类型安全检查,内存管理和释放无效对象。程序员可以花更多的精力关注程序的应用逻辑设计并可以减少代码的编写量。这就意味着更短的开发时间和更健壮的程序。
非托管代码 (unmanaged code)
在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
编译器和工具公开运行库的功能并使您能够编写受益于此托管执行环境的代码。使用针对运行库的语言编译器开发的代码称为托管代码;使用托管代码有很多好处,因为它具有诸多功能,如跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
若要使运行库能够向托管代码提供服务,语言编译器必须发出对代码中的类型、成员和引用进行描述的元数据。元数据与代码一起存储;每个可加载的公共语言运行库可移植可执行 (PE) 文件都包含元数据。运行库使用元数据完成以下任务:查找和加载类,在内存中对实例进行布局,解析方法调用,生成本机代码,强制安全性,以及设置运行时上下文边界。
运行库自动处理对象布局和管理对对象的引用,当不再使用对象时释放它们。其生存期以这种方式来管理的对象称为托管数据。垃圾回收消除了内存泄漏以及其他一些常见的编程错误。如果代码是托管的,则可以在 .NET Framework 应用程序中使用托管数据、非托管数据或者使用这两者。由于语言编译器提供它们自己的类型(如基元类型),因此可能并不总是知道(或需要知道)数据是否是托管的。
公共语言运行库使设计其对象能够跨语言交互的组件和应用程序变得很容易。用不同语言编写的对象可以互相通信,并且它们的行为可以紧密集成。例如,可以定义一个类,然后使用不同的语言从原始类派生类或调用原始类的方法。还可以将类的实例传递到用不同的语言编写的类的方法。这种跨语言集成之所以成为可能,是因为针对运行库的语言编译器和工具使用由运行库定义的通用类型系统,而且它们遵循运行库关于定义新类型以及创建、使用、保持和绑定到类型的规则。
所有托管组件都携带有关生成所基于的组件和资源的信息,作为其元数据的一部分。运行库使用这些信息确保组件或应用程序具有它需要的所有内容的指定版本,这使代码不太可能由于某些未满足的依赖项而中断。注册信息和状态数据不再保存在注册表(在注册表中建立和维护它们会很困难)中。相反,有关您定义的类型(和它们的依赖项)的信息作为元数据与代码存储在一起,这样大大降低了组件复制和移除任务的复杂性。
语言编译器和工具按照对于开发人员来说有用而直观的方式来公开运行库的功能。这意味着运行库的某些功能可能在一个环境中比在另一个环境中更引人注意。您对运行库的体验取决于您使用的语言编译器或工具。例如,如果您是一位 Visual Basic 开发人员,您可能会注意到有了公共语言运行库,Visual Basic 语言的面向对象的功能比以前多了。下面是运行库的一些优点:
性能改进。
能够轻松使用用其他语言开发的组件。
类库提供的可扩展类型。
新的语言功能,如面向对象的编程的继承、接口和重载;允许创建多线程的可缩放应用程序的显式自由线程处理支持;结构化异常处理和自定义属性支持。
如果使用 Microsoft® Visual C++® .NET,则可以使用 C++ 托管扩展来编写托管代码。C++ 托管扩展提供了托管执行环境以及对您所熟悉的强大功能和富于表现力的数据类型的访问等优点。其他运行库功能包括:
跨语言集成,特别是跨语言继承。
垃圾回收,它管理对象生存期,使引用计数变得不再必要。
自我描述的对象,它使得使用接口定义语言 (IDL) 不再是必要的。
编译一次即可在任何支持运行库的 CPU 和操作系统上运行的能力。
还可以使用 C# 语言编写托管代码。C# 语言提供了下列优点:
完全面向对象的设计。
非常强的类型安全。
很好地融合了 Visual Basic 的简明性和 C++ 的强大功能。
垃圾回收。
类似于 C 和 C++ 的语法和关键字。
使用委托而不是函数指针,从而增强了类型安全和安全性。函数指针通过 unsafe C# 关键字和 C# 编译器 (Csc.exe) 的 /unsafe 选项可用于非托管代码和数据。
- heart_string
- 等 级:
什么样的代码是托管代码?
什么样的代码是非托管代码?
这个问题我也不清楚,还望大虾们指教!
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- yagebu1983
- (丐帮帮主)
- 等 级:
up。。。
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
执行效率
http://www.cnblogs.com/wuchang/archive/2006/12/07/584997.html
- jscn123789abc
- (aaa)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- jscn123789abc
- (aaa)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- Wind_08
- (brook)
- 等 级:
学习
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
非托管代码相当于 本机CPU指令序列
.NET 的 CLR 相当于Java解释器
这些东西MSDN上都写得很清楚的,如果真想深入了解的话LZ可以看看CLR via C#、.net框架设计、Effective C#之类的书籍
托管代码 (managed code)
由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。
托管代码是可以使用20多种支持Microsoft .NET Framework的高级语言编写的代码,它们包括:C#, J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及C++。所有的语言共享统一的类库集合,并能被编码成为中间语言(IL)。运行库编译器(runtime-aware ompiler)在托管执行环境下编译中间语言(IL)使之成为本地可执行的代码,并使用数组边界和索引检查,异常处理,垃圾回收等手段确保类型的安全。
在托管执行环境中使用托管代码及其编译,可以避免许多典型的导致安全黑洞和不稳定程序的编程错误。同样,许多不可靠的设计也自动的被增强了安全性,例如 类型安全检查,内存管理和释放无效对象。程序员可以花更多的精力关注程序的应用逻辑设计并可以减少代码的编写量。这就意味着更短的开发时间和更健壮的程序。
非托管代码 (unmanaged code)
在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。
- typeof
- (null)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- fanbo
- (天天编程)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- Jueyoung
- (早上可以吃鸡蛋, 喝粥了!)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
区别如下
代码模型:非托管代码通过接口来进行通信,百托管代码则不必经过接口,而是直接传递数据;
错误处理机制:COM方法通常返回HRESULT,表示调用成功还是失败。托管代码是通过一场机制来进行错误处理;
标识:GUID标识特定的非托管类型,但并不是提供类型的位置信息。托管类型的名称不但包含类型名,而且还包含唯一的程序集名称。因为程序集名唯一的标识类型,所以可以跨越多个程序集来重用某一类型名称;
类型定义:COM组件的类型库只包含公共类型,并且是可选的。在托管编程模式中,类型信息对于所有类型来说都是强制性的。互操作服务提供了用于将类型库转换为程序集中的元数据,以及将原数据转换为类型库的工具;
类型安全:非托管编译器不会对指针类型提供任何类型检查,所以会使代码很容易受到潜在的危害的影响。在通常情况下,托管代码需要更高级的新人级别。程序员虽然可以继续在托管代码的不安全中使用的指针,但是因为不安全行为受到一些限制;
版本控制:COM接口是不可变的,如果要更改接口,则必须使用新的GUID对其进行重命名。托管类型可以使用同一名称进行深化。
名称相同的两个类型,在托管代码和非托管代码之间是不同的,在不同的语言之间也是不同的,所以在进行代码互操作时,必须进行封装处理。大多数的数据类型在托管和非托管内存中都具有公共表示形式。通过使用.Net框架的互操作机制的封送拆收器,可以处理这些这些同名但不同意义的类型。如果类型不明确,或在托管内存中不存在这些类型,则必须个人编码,并向封送拆收器提供如何封送不明确类型的显示指令,以显式地进行封送处理。
- jscn123789abc
- (aaa)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- start55
- (start55)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- fengqipiaobo
- (风起漂泊)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- niit_zc
- (绝对零度)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- laichunlin
- (小赖)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- xiatiandetonghua
- (xiatiandetonghua)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- handong520
- (寒冬)
- 等 级:
区别如下
代码模型:非托管代码通过接口来进行通信,百托管代码则不必经过接口,而是直接传递数据;
错误处理机制:COM方法通常返回HRESULT,表示调用成功还是失败。托管代码是通过一场机制来进行错误处理;
标识:GUID标识特定的非托管类型,但并不是提供类型的位置信息。托管类型的名称不但包含类型名,而且还包含唯一的程序集名称。因为程序集名唯一的标识类型,所以可以跨越多个程序集来重用某一类型名称;
类型定义:COM组件的类型库只包含公共类型,并且是可选的。在托管编程模式中,类型信息对于所有类型来说都是强制性的。互操作服务提供了用于将类型库转换为程序集中的元数据,以及将原数据转换为类型库的工具;
类型安全:非托管编译器不会对指针类型提供任何类型检查,所以会使代码很容易受到潜在的危害的影响。在通常情况下,托管代码需要更高级的新人级别。程序员虽然可以继续在托管代码的不安全中使用的指针,但是因为不安全行为受到一些限制;
版本控制:COM接口是不可变的,如果要更改接口,则必须使用新的GUID对其进行重命名。托管类型可以使用同一名称进行深化。
名称相同的两个类型,在托管代码和非托管代码之间是不同的,在不同的语言之间也是不同的,所以在进行代码互操作时,必须进行封装处理。大多数的数据类型在托管和非托管内存中都具有公共表示形式。通过使用.Net框架的互操作机制的封送拆收器,可以处理这些这些同名但不同意义的类型。如果类型不明确,或在托管内存中不存在这些类型,则必须个人编码,并向封送拆收器提供如何封送不明确类型的显示指令,以显式地进行封送处理。
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- gorllen
- (gorllen)
- 等 级:
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
- ymenghong
- (ymenghong)
- 等 级:
托管代码、非托管代码
在非托管C++中使用GDI+
在非托管C++中使用GDI
主机托管
临时托管
什么是服务器托管?
香港服务器托管
主机托管-功能特点
“XX儿童托管服务公司”
股权托管规章依据
股权托管的好处
Inblogit—介于托管和独立博客之间的Blogging方式?-非寒编程网
[C#/C ]C#调用非托管DLL的APIs - .NET人字拖 - 博客园
C#程序调用非托管C++ DLL文件的方法 - Chase的技术博客 - 博客园
上海电信机房服务器托管|13524382005陈大开|双线机房服务器托管
菏泽网通主机托管价格表
基金管理费与托管费
合伙托管服务器全程体验
虚拟的托管散热效率
合伙托管服务器全程体验
基金管理费与托管费
美容院经营新名词美容院托管
上海真如机房托管.上海电信真如机房托管上海移动机房托管13501759224
代码: