ZKX's LAB

谁能告诉我c++中的托管类和非托管类是什么? 非托管内存的好处

2020-07-21知识17

如何让IntPtr指向一块内存,以及托管内存与非托管内存的相互转化 托管是。NET的一个专门概念,它是融于通用语言运行时(CLR)中的一种新的编程理念,因此我们完全可以把“托管”视为。NET”。那么什么是“通用语言运行时”?通用语言运行时是。NET框架应用程序的执行引挚。它提供了许多服务,其中包括:代码管理(装入和执行)、类型安全性验证、元数据(高级类型信息)访问、为管理对象管理内存、管理代码,COM对象和预生成的DLLs(非管理代码和数据)的交互操作性、对开发人员服务的支持等等。也就是说,使用托管C++意味着,我们的代码可以被CLR所管理,并能开发出具有最新特性如垃圾自动收集、程序间相互访问等的。NET框架应用程序。谁能告诉我c++中的托管类和非托管类是什么? 这个还不是目前的C++标准,不过visual studio 2005里已经有了。托管主要用于指针?托管指针好像是其内存由编译器负责释放,非托管指针就是一般的指针了。(内存的自动释放是C++的一个大问题,目前在语言层面上没有解决方法,解决方法集中在库上,比如boost的智能指针类)怎样释放+AllocHGlobal+从进程的非托管内存中分配的内存 IntPtrptr=Marshal.AllocHGlobal(704*576*3);如果没有手动释放内存,会有内存溢出;产生OutOfMemoryException没有足够的内存继续履行程序时引发的异常。调用Marshal.AllocHGlobal必须调用Marshal.FreeHGlobal(ptr);来手动释放内存,即便调用GC.Collect();方法也没法释放。查看更多答案>;>;希望采纳请教一下,什么事托管资源,什么事非托管资源。可否从最基础的概念上讲解一下 托管资源和非托管资源这个要从内存回收上来讲,首先一个点很明确:托管资源,.net垃圾回收器自动回收,非托管资源,垃圾回收期没法自动回收;另外一点,托管资源由.net核心管理创建,非托管资源是由.net核心调用其他的接口创建,.net无法控制,例如active控件,画笔、画刷。这些都是.Net调用系统接口创建的,它管不着,只能由用户自已释放。最后,.Net内核封装了的,能够或者有权限自动释放的就是托管资源;如果是.Net调用外部资源,无法自动释放的就是非托管资源。

#托管#c++

随机阅读

qrcode
访问手机版