C++.NET和C#在运行机制上有什么不同之处吗?

born20c 2004-10-29 05:37:20
dot net framework的c++和c#除了语言本身的不同之处以外,还有别的不同之处吗?
c++是不是象c#一样编译成中间代码?是否也是解释执行?
c++在内存分配方面具有更大的灵活性,是否也会带来安全问题,dot net framework如何处理c++的内存泄露?是不是象传统的c++一样不进行处理,完全依靠程序员的意愿?
...全文
249 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
chutao 2010-06-13
  • 打赏
  • 举报
回复
C#中也可以使用不安全代码
chutao 2010-06-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hhhh63 的回复:]
在C++中使用托管类编程时,内存是自动管理的,不用delete。“不断的new出一个托管类,程序占用内存是一直增加的,没有下降的趋势”,这个问题有两种可能,一是被new的对象生成周期没有结束,二是垃圾回收器还没有来得及回收,不过退出程序后,内存就被释放了,而使用非托管代码new一个类时,如果不手工delete,退出程序后也不会释放内存。再运行程序又会占用一些内存,有可能将内存耗尽,显示系统资源不足……
[/Quote]
right
mynix 2004-10-31
  • 打赏
  • 举报
回复
总的来说是没有太多区别:
区别只是编程语法层面上的,因为.net最终都会将这些用各种不同语言编写的程序转换成微软中间语言MSIL。
因此,也可以说.net只支持一种语言——MSIL,其他高级语言只是多种不同的编程语法
born20c 2004-10-30
  • 打赏
  • 举报
回复
hhhh63(hhhh63),多谢,也谢谢上面各位回答问题的朋友。
听了上面几位的介绍,明白了一些东西,可是还有一些问题冒出来了。

c++.net可以使用mfc框架,也可以使用dot net框架进行编程。使用dot net框架的时候,我发现建立的类中都带有 __gc 修饰符,表示托管类。dot net框架提供的一些基础类也带有这样的标记,比如String类。我原本以为托管类是不需要程序员管理内存的,可是通过自己编写的一个例子,我发现我不断的new出一个托管类,程序占用内存是一直增加的,没有下降的趋势。“托管”到底意味着什么呢?dot net框架会为c++启动垃圾回收器吗?

如果dot net为c++启用了垃圾回收的机制,c++和c#还有什么区别呢?无非是语法的不同了。
如果“托管”类仍然需要程序员自己释放,是用delete释放吗?我使用delete释放一个托管类的时候为什么不允许呢?
karykwan 2004-10-30
  • 打赏
  • 举报
回复
如楼上所言..
hhhh63 2004-10-30
  • 打赏
  • 举报
回复
在点耐特中 C++和C#程序的运行机制是完全不同的。

C#依赖点耐特框架运行,所有对象都包含在点耐特框架的dll文件中(如FORM,TEXTBOX等等),所以有点象解释型的语言,C#程序必须安装点耐特框架才能运行;C#不存在内存泄漏问题,点耐特框架会自动释放不再使用的对象所占用的内存,程序结束时会释放所有的内存,在MSDN中叫拉圾回收,2003版比2002版回收及时一些。

C++使用MFC链接库,与点耐特框架完全不同,编译完成后链接程序将MFC库函数直接打包到.EXE文件中。基本的C++程序运行时不依赖外部的DLL文件(WINDOWS系统的DLL除外),直接复制到任何机器上都可以运行。在C++中new一个对象后,必须用一个对应的delete方法将其释放,否则对象会一直留在内存中,程序退出后还会占用内存,再次运行时又重新占用一块内存,这就造成内存泄漏。
wxiaozhe 2004-10-30
  • 打赏
  • 举报
回复
我觉得他们的运行机制没有太大的区别!
整个dot net是一个大的环境,而c++,c#只不过是它的某种支持语言罢了,他们应该具有相同的运行机制!
I think so!^_^
DataSet2 2004-10-30
  • 打赏
  • 举报
回复
唯一的区别
C++.NET是变态的
hhhh63 2004-10-30
  • 打赏
  • 举报
回复
在C++中使用托管类编程时,内存是自动管理的,不用delete。“不断的new出一个托管类,程序占用内存是一直增加的,没有下降的趋势”,这个问题有两种可能,一是被new的对象生成周期没有结束,二是垃圾回收器还没有来得及回收,不过退出程序后,内存就被释放了,而使用非托管代码new一个类时,如果不手工delete,退出程序后也不会释放内存。再运行程序又会占用一些内存,有可能将内存耗尽,显示系统资源不足。

如果C++全部使用托管代码,与使用C#是没有什么区别的;同样如果在C#中使用非安全码,也有点象C++。

做应用层的程序时,选C++和C#都行,看自己的习惯和熟练程度,用C#好些,提供了更多的类,可以少写一些代码。如果做底层程序,如驱动、工控等只能用C++或汇编了。

根据实际情况,在C++中也有把托管和非托管代码混合用的。
Firestone2003 2004-10-30
  • 打赏
  • 举报
回复
dot net framework的所有语言只要使用.net类库就没有什么太大的区别
但是如果使用其本身的一些特性除外
oyljerry 2004-10-30
  • 打赏
  • 举报
回复
学习
somedummy 2004-10-29
  • 打赏
  • 举报
回复
C++没有.Net这个概念,VC++ .Net是一个整合开发环境

好像C#不可以使用非托管代码吧?VC++可以提供更多的兼容性,旧有的代码很多可以在通过很少的调整以后就可以直接编译使用

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧