A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李奔 中级黑马   /  2013-6-1 09:14  /  1545 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

是不是所有的C#代码都是托管代码啊?
所以C#中的资源都不用手动释放,而是由CLR自动释放,是这样吗?
另外由于C#是托管代码,是不是不能像C、C++那样直接对内存进行操作?

3 个回复

倒序浏览
刚才网速不是太给力,点了好几次才发帖成功,结果发了三个帖子,希望管理员能把其他的两个帖子删掉,谢谢!
回复 使用道具 举报
GC只能处理托管内存资源的释放,对于非托管资源则不能使用GC进行回收,如数据库连接对象、FileStream;
在.net中的非托管代码可以对内存过行操作;
{:soso_e103:}当然,.net肯定也是有非托管代码的,
回复 使用道具 举报
     托管代码(Managed Code)是由公共语言运行库(CLR)执行的代码,而不是由操作系统直接执行。托管代码也可以调用CLR的运行库服务和功能,比如GC、类型检查、安全支持等等。这些服务和功能提供独立与开发语言的、统一的Managed Code应用程序行为。
     C#中有垃圾回收机制,但是它不是在一个对象你不用了就立马给回收了,而是在某个时间由系统自动进行回收,在什么时候GC会运行估计在厉害的牛人也说秦楚吧!但是有一点在程序结束时GC一定会运行。
     C#中虽然没有明确的提出像C、C++语言中用于直接操作内存地址的指针的概念。因为默认情况下,为了保证类型的安全,C#是不支持指针运算的。但是其也可以直接对内存进行操作的。我们利用unsafe关键字可以用来说明使用指针的不安全的区域,在这片不安全的区域内是可以使用指针的。
以上是我的理解,如有不妥之处请指出,我们相互学习彼此交流,共同进步,一起向着黑马的大门一步一步的迈进。谢谢!

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马