托管代码与非托管代码的区别
广义的说,托管代码就是集成在你所使用的开发平台内的编程语言。例如:目前最常见的
.Net
运行库里集成了VC++,
C#,
VB,
F#...等20多种语言的构件和处理功能。
托管代码:
”托管“的含义就是,这些语言的后台(隐性的)操作都由这个管理系统(.Net)完成了,你把你的编程委托给了开发平台(库)来完成。当你使用这些语言时,一些系统资源的调用、回收、编译……各种工作都由它来完成,你只需要专注于程序功能的实现即可。
非托管代码:
就是指不在你这个集成开发环境里,而是使用其它的开发平台写出的程序(代码)。比如说java语言(不是jscript),basic语言(不是VB),C语言(不是VC/C++/C#)等等……它们也有自己的开发平台和程序,用这些语言写出的程序就属于”非托管“。
当非托管的代码在你的托管平台上运行时,你的托管平台就不能很好地处理一些后台(隐性的)操作,就需要编写额外的代码来使它们变得和谐并且安全。
举个最简单的例子:
C和汇编语言,它们是最早期进入计算机领域的高级语言(汇编已经不能算高级语言了:)),它们可以直接对CPU、内存、总线、I/O、硬盘等硬件进行操作(读/写),像DOS、Windows、iOs这些操作系统都是用它们写的。
所以你在.Net集成环境中直接使用这些语言时,会遇到很大的阻碍,阻碍来源于所谓的”托管平台“,它认为这些操作是不安全的,就会拒绝编译和执行。
但这些语言的特点是操作直接、速度奇快(跟托管平台比),而且专用性和针对性极强,当我们需要运行具有上述特点的程序时,C和汇编可以说是最理想的语言了。要想让它们和托管平台”和平共处“的话,就需要编制额外的代码让它们符合这个托管平台的安全和管理规范,还需要有非常高深的编程功底。要不然等待我们的就会有两种结果:一是程序无法运行、二是直接造成软件或硬件的损坏(底层操作是可以损伤硬件的)。
我解释清楚了吗?
C#里都是托管,而且是他的专有名词,.NET中都是托管的环境
非托管一般是C++或其他的语言写的,比如系统API的调用就是非托管[DLLImport("user32.dll")]这个就是非托管
这是最基本的解释,我是这么理解的。。。
如果更具体点,可以去百度百科看看托管,或GOOGLE一下很多的
非托管的刚好相反,可以直接进行硬件操作,性能比较高,但是对开发人员的要求也比较高。
最直观的就是c#不推荐使用指针,而c++就可以使用指针来直接读取内存;
c#使用垃圾回收,c++要手动的释放对象……
其实整个.NET项目都是运行在.NET Framework上的托管代码,这个道理和JAVA虚拟机的机制是类似的。
最简单的说呢,受托管的代码不能直接写内存,是安全的,而非托管代码是非安全代码,可以使用指针操作内存。
一般的项目使用托管代码都行了,也就是说在程序里面不需要用到非安全代码。
对于一些对速度要求高的部分功能可以考虑使用非安全代码,使用指针等读写内存,而对于真个项目来说还是受托管的安全代码。
有关非安全代码的信息请查阅MSDN unsafe。
mono托管与非托管代码
在.NET\/Mono框架中,所有的编程代码默认是托管的,这意味着它们由Common Language Infrastructure (CLI)进行内存管理和线程安全控制。这种设计确保了代码在运行时的稳定性和一致性。然而,对于那些已有的非托管代码,如C++或者C的库函数,我们可以利用.NET或Mono提供的System.InterOpServices库来实现与这些代码...
托管代码与非托管代码的区别
1简单的说,就是代码被编译成MSIL后在.net的Framework下运行,同操作系统底层的交互都交给framework去做。所谓非托管代码就是脱离了Framework的管制,直接同底层API打交道,自己管理自己的内存和安全机制等东西。而托管代码就不管这些,全都由Framework去完成 2“程序”一般都是在对操作系统进行直接或者间接...
托管代码和非托管代码有什么区别
非托管代码:就是指不在你这个集成开发环境里,而是使用其它的开发平台写出的程序(代码)。比如说java语言(不是jscript),basic语言(不是VB),C语言(不是VC\/C++\/C#)等等……它们也有自己的开发平台和程序,用这些语言写出的程序就属于”非托管“。当非托管的代码在你的托管平台上运行时,你的托管...
托管代码与非托管代码的区别
简单来说,托管的代码就是把有关内存管理(内存申请,内存释放,垃圾回收之类的)全部都是.net的CLR来管理,就是说使用托管的代码把底层的一些操作都封装起来了,不能直接进行内存的读取之类的和硬件相关的操作,优点就是比较安全,不会出现诸如内存泄露之类的问题,缺点也很明显,不能直接读取内存,性能...
托管代码和非托管代码的区别
简单地说...CLR执行的代码都是托管代码,除此之外都是非托管代码...也就是说,托管代码就是.NET中间代码..
...= 4)]什么意思?什么是托管代码?非托管代码?她们之间怎
托管代码指的是必须依靠.NET框架解释运行的代码,非托管代码一般指的是传统的不需要借助.NET框架解释的代码。在.NET出现之前,如VB,C++,DELPHI编写的程序都是非托管代码。[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]MarshalAs属性指示如何在托管代码和非托管代码之间封送数据。很多时候我们想直接在...
了解.NET Framework 构成
在.NET中,我们区分两种代码:托管代码(在CLR下运行)和非托管代码(不依赖CLR)。CLR负责内存管理、线程执行、代码安全验证、编译和许多系统服务的提供。它由多个组件构成,为开发人员提供强大的基础。2. **框架类库 (Framework Class Library, FCL)**: 作为.NET的核心可重用组件,FCL与公共语言运行时...
mcs是什么意思啊
MCS是英文ManagedCodeSystem的缩写,意为“托管代码系统”。托管代码是指在CLR(CommonLanguageRuntime)下运行的代码,而CLR则是NETFramework的一个组成部分,它提供了一种“运行程序的程序”,可管理和执行托管代码,并提供公共语言运行库、垃圾回收和安全性等机制。MCS的特点和优劣 相...
C#中的非托管代码是什么
分析:非托管代码(Unmanaged Code)是指直接编译成目标计算机的机器码,这些代码只能运行在编译出这些代码的计算机上,或者是其他相同处理器或者几乎一样处理器的计算机上。非托管代码不能享受公共语言运行库所提供的一些服务,例如内存管理、安全管理等。如果非托管代码需要进行内存管理等服务,就必须显式地...
托管类型与非托管类型的转换?c#代码。。。
托管类型(准确地说是托管资源)与非托管类型之间的区别在于前者有clr的垃圾回收期统一回收,不需要显示声明回收代码。非托管资源需要显示调用回收代码来释放占用的资源。例如int、DateTime等资源都是托管资源,StreamReader、SqlConnection等是非托管资源。
弥羽止嗽: 1简单的说,就是代码被编译成MSIL后在.net的Framework下运行,同操作系统底层的交互都交给framework去做.所谓非托管代码就是脱离了Framework的管制,直接同底层API打交道,自己管理自己的内存和安全机制等东西.而托管代码就不...
美姑县19390696200: 托管代码和非托管代码有什么区别 - ?
弥羽止嗽: 广义的说,托管代码就是集成在你所使用的开发平台内的编程语言.例如:目前最常见的 .Net 运行库里集成了VC++, C#, VB, F#...等20多种语言的构件和处理功能.托管代码:”托管“的含义就是,这些语言的后台(隐性的)操作都由这个管理...
美姑县19390696200: 托管代码与非托管代码的区别 - ?
弥羽止嗽: 其实整个.NET项目都是运行在.NET Framework上的托管代码,这个道理和JAVA虚拟机的机制是类似的.最简单的说呢,受托管的代码不能直接写内存,是安全的,而非托管代码是非安全代码,可以使用指针操作内存.一般的项目使用托管代码都行了,也就是说在程序里面不需要用到非安全代码.对于一些对速度要求高的部分功能可以考虑使用非安全代码,使用指针等读写内存,而对于真个项目来说还是受托管的安全代码.有关非安全代码的信息请查阅MSDN unsafe.
美姑县19390696200: c#中托管代码和非托管代码的区别! - ?
弥羽止嗽: C#里都是托管,而且是他的专有名词,.NET中都是托管的环境 非托管一般是C++或其他的语言写的,比如系统API的调用就是非托管[DLLImport("user32.dll")]这个就是非托管 这是最基本的解释,我是这么理解的...如果更具体点,可以去百度百科看看托管,或GOOGLE一下很多的
美姑县19390696200: C# 什么是托管代码? 什么是非托管代码? - ?
弥羽止嗽: 托管代码 (managed code) 由公共语言运行库环境(而不是直接由操作系统)执行的代码.托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等.这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为.Unmanaged Code - 非托管代码 在公共语言运行库环境的外部,由操作系统直接执行的代码.非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务.
美姑县19390696200: 托管和非托管是什么意思 - ?
弥羽止嗽: 托管是.NET的一个专门概念,它是融于通用语言运行时(CLR)中的一种新的编程理念,因此我们完全可以把“托管”视为“.NET”.那么什么是“通用语言运行时”?通用语言运行时是.NET 框架应用程序的执行引挚.它提供了许多服务,其中包括:代码管理(装入和执行)、类型安全性验证、元数据(高级类型信息)访问、为管理对象管理内存、管理代码,COM对象和预生成的DLLs(非管理代码和数据)的交互操作性、对开发人员服务的支持等等.
美姑县19390696200: 什么是托管、非托管?? - ?
弥羽止嗽: 可以理解为所有.net程序的环境支持,或说运行环境. 详细解释: NET Framework 是一种新的计算平台,它简化了在高度分布式 Internet 环境中的应用程序开发..NET Framework 旨在实现下列目标: 提供一个一致的面向对象的编程环境,而无...
美姑县19390696200: C#中提到的非托管的dll和托管的dll,两者有什么不同吗? - ?
弥羽止嗽: 托管DLL,说白了,就是 完全由.NET托管代码实现的DLL,完全依赖于 .NET 平台的 CLR 运行.托管DLL,受.NET CLR管控,支持内存自动回收等的,对于.NET平台是安全DLL 非托管DLL,是指完全或者部分 不是用.NET代码实现,不依赖于.NET平台即可运行,例如 COM方式 的DLL,不支持自动回收内存,对于.NET平台而言,也是非安全可控的.
美姑县19390696200: .net框架为什么要进行代码托管? ?
弥羽止嗽: 托管的意思就是你的代码不是直接使用计算机的资源而是使用运行时给你分配的资源.换句话说就是托管程序不能跨过运行时去读写其他的内存或硬件资源.托管代码比本地代码更好控制,极大的减少了因为程序自身访问内存引发的内存地址冲突,硬件资源冲突等风险,降低开发难度,提高软件质量.IL,动态编译并不是托管的特性,而是.net的特性.
美姑县19390696200: C#中使用托管资源和非托管资源的区别,以 - ?
弥羽止嗽: 托管资源指的是.NET可以自动进行回收的资源,主要是指托管堆上分配的内存资源.托管资源的回收工作是不需要人工干预的,有.NET运行库在合适调用垃圾回收器进行回收.非托管资源指的是.NET不知道如何回收的资源,最常见的一类非托...