首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

托管代码与非托管代码

就最近的情况来看,非托管程序会通过COM接口来获取操作系统服务。       跟Visual Studio平台的其他编程语言不一样,Visual C++可以创建非托管程序。...当你在那些语言里面声明一个类,那么这个类的实例会在托管堆中被创建,垃圾收集器(GC)会帮我们管理这些对象的回收。但是在Visual C++中,你有另一个选择。...即使你正创建一个托管程序,你可以决定哪些类是托管类型,哪些类是非托管类型的。...delete pf;       C++编译器实际上会用两个堆,一个托管堆和一个非托管堆,然后通过对new操作符的重载来实现对创建不同类型类的实例,分配不同的内存。...对于托管类型会有一些约束:它们不能实现多重继承,或者继承于非托管类型;它们不能用friend关键字来实现私有访问,它们不能实现拷贝构造函数。所以,你有可能不想把你的类声明为托管类型。

4.6K30

C# 托管资源与非托管资源

托管资源: Net平台中,CLR为程序员提供了一种很好的内存管理机制,使得程序员在编写代码时不要显式的去释放自己使用的内存资源(这些在先前C和C++中是需要程序员自己去显式的释放的)。...所以,当我们在类中封装了对非托管资源的操作时,我们就需要显式,或者是隐式的释放这些资源。...非托管资源指的是.NET不知道如何回收的资源,最常见的一类非托管资源是包装操作系统资源的对象,例如文件,窗口,网络连接,数据库连接,画刷,图标等。...在.NET中,Object.Finalize()方法是无法重载的,编译器是根据类的析构函数来自动生成Object.Finalize()方法的,所以对于包含非托管资源的类,可以将释放非托管资源的代码放在析构函数...上面就是.NET中对包含非托管资源的类的资源释放机制,只要按照上面要求的步骤编写代码,类就属于资源安全的类。

3.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C#托管代码和非托管代码

    含义 托管/非托管是微软的.net framework中特有的概念。 非托管代码:也叫本地(native)代码。 托管代码:是由公共语言运行库(CLR)执行的代码,而不是由操作系统直接执行。...程序实际上是被“托管”在公共语言运行库中。随着程序集的运行,公共语言运行库会持续地提供各种服 务,例如内存管理、安全管理、线程管理等等。和托管资源/非托管资源不同,不要弄混。...托管代码的优点 1.跨平台。...有关内存管理(内存申请,内存释放,垃圾回收之类的)全部都是.net的CLR来管理 2.更加安全,不会出现诸如内存泄露之类的问题 托管代码的缺点 1.对程序的性能也产生一定的影响。...CLR首次加载程序集代码时,JIT将IL编译成本地代码时,会对其进行代码优化,这类似与非托管C++编译器的后端所做的事情.这可能也会花费加多的时间生成优化代码。 2.不能直接读取内存,不够灵活

    3.6K30

    C++ .NET编程:托管C++概述

    (3)    托管类:尽管Visual C++数据在默认情况下是非托管数据,但是在使用C++的托管扩展时,可以使用“__gc”关键字将类标记为托管类。...另外,一个托管类也完全可以成为 .NET 框架的成员,由此可以带来的好处是,它可以与其他语言编写的类正确地进行相互操作,如托管的C++类可以从Visual Basic类继承等。...但同时也有一些限制,如托管类只能从一个基类继承等。需要说明的是,在托管C++应用程序中既可使用托管类也可以使用非托管类。...这里的非托管类不是指标准C++类,而是使用托管C++语言中的__nogc关键字的类。  ...一个__gc类不能从一个非托管类中继承,且不能包含从它派生的非托管类。但一个__gc类最多可以从一个托管类中继承。    B. 一个__gc类不能定义成一个友元类或包含一个友元成员函数。

    1.5K20

    【非原创】C++类成员函数的重载、覆盖和隐藏

    A、覆盖是指在同一个类中名字相同,参数不同 B、重载是指派生类函数覆盖基类函数,函数相同,参数相同,基类函数必须有virtual关键字 C、派生类函数与基类函数相同,但是参数不同,会"隐藏"父类函数 D...、函数名字相同,参数相同,基类无virtual关键字的派生类的函数会"隐藏"父类函数 答案: CD 解析: a.成员函数被重载的特征: (1)相同的范围(在同一个类中); (2)函数名字相同;...b.覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分别位于派生类与基类); (2)函数名字相同; (3)参数相同; (4)基类函数必须有virtual 关键字。 c....“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下: (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。...(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。

    68720

    托管C++、C++CLI、CLR

    但同时也有一些限制,如托管类只能从一个基类继承等。需要说明的是,在托管C++应用程序中既可使用托管类也可以使用非托管类。...这里的非托管类不是指标准C++类,而是使用托管C++语言中的__nogc关键字的类。...(2) 使用托管可以从任何一个.NET框架兼容语言中调用一个C++组件,也可调用非托管DLL、其它库以及类等。   (3) 可以直接从非托管代码中访问.NET框架。   ...目前只有托管C++及其后继者C++/CLI可以做到无缝整合托管和非托管代码,而在托管代码中调用COM的速度又相当慢,所以经常被用于其他语言和非托管代码之间的桥梁。   ...一个__gc类不能从一个非托管类中继承,且不能包含从它派生的非托管类。但一个__gc类最多可以从一个托管类中继承。   B. 一个__gc类不能定义成一个友元类或包含一个友元成员函数。

    2.9K40

    在VS2010上使用C#调用非托管C++生成的DLL文件(图文讲解) 背景

    背景      在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使用一些第三方通讯组件的时候,通过C#来开发应用软件时,就需要利用DllImport特性进行方法调用。...extern "C" __declspec(dllexport)加起来的目的是为了使用DllImport调用非托管C++的DLL文件。因为使用DllImport只能调用由C语言函数做成的DLL。...现在来演示下如何利用C#项目来调用非托管C++的DLL,首先创建C#控制台应用程序: ? 7....+的DLL类的导入入口特征,并通过static extern对extern “C”进行对应。...以上的方法只能通过静态方法对于C++中的函数进行调用。那么怎样通过静态方法去调用C++中一个类对象中的方法呢?

    2.8K50

    【YashanDB知识库】ycm托管数据库时,数据库非OM安装无法托管

    查看无yasom和yasagent进程,且在{数据库安装目录}/om/{数据库名称}的目录下没有conf、data、log等目录,确定数据库不是用yasboot安装,是用脚本安装的 问题的风险及影响 非yasboot...安装,ycm无法完成托管,无法监控 问题影响的版本 不涉及ycm的版本问题 问题发生原因 数据库版本太旧或安装数据库的人没有按照规范使用yasboot安装 解决方法及规避方式 将数据库先托管到yasom...中,再托管到ycm中 问题分析和处理过程 ini 代码解读复制代码(1)生成配置文件 -- ip必须是本机ip,install-path不能和安装的数据库path重重复 ....----------------+-----------------+---------------+----------------+------------------------------- 托管至...yasom完成后,再按照流程托管至ycm即可 经验总结 安装数据库要按照规范安装,非规范安装会导致一系列问题

    5400

    六、CLR下的托管代码应用程序与非托管代码程序之间的性能对比

    1、托管程序二次编译的问题,以及微软做的优化 五、CLR加载程序集代码时,JIT编译器对性能的产生的影响中介绍了CLR下托管应用程序的二次编译对性能产生的影响.事实上,在IL编译成本机代码的时候的时候...但是,在微软做了大量的性能优化工作之后,将这些额外的开销保持在最低的限度之内. 2、托管程序的实际性能 事实上,托管程序的性能实际上要比非托管应用程序要好,举个例子,当JIT编译器在运行时将IL代码编译器编译成本机代码的时候...,编译器对执行环境的认识比非托管编译器更深刻。...如果JIT编译器没有使托管应用程序达到应有的效果,如果需要进一步确认,有两种方法: (1)、.Net Framework SDK提供的NGen.exe工具 该工具将程序集的所有的IL代码编译成本机代码,...(2)、使用ProfileOptimization类 ?

    91340
    领券