西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发C#.NET → c#新手对栈与堆的理解

c#新手对栈与堆的理解

相关软件相关文章发表评论 来源:本站整理时间:2010/11/29 15:03:32字体大小:A-A+

作者:佚名点击:95次评论:1次标签: java class object

e栈快递侠app2.2.0手机版
  • 类型:生活服务大小:12.8M语言:中文 评分:10.0
  • 标签:
立即下载
最近在公司实习,主要业务是工业软件,用.net开发,说实话我之前一直用java的。c#都没怎么接触过,所以打算每天写点随笔,鉴证我的学习过程。

下面是我对栈与堆的理解(纯个人观点):

1.首先对于值类型是直接把变量的值保存在栈中的,而引用类型则把数据的地址保存在栈中,而实际数据则保存在堆中。

2.栈:在内存中存储的是固定长度的数据(如:int是4个字节)。堆:存储的是可变长度的数据(如string)。

3.在c#中还提到了托管堆,这其实是.net不同于其他语言的地方,它存储的是引用类型如类,对象并受垃圾收集器的控制和管理。

例:

1. class1 object1;

2. object1=new class1();

第一句定义了class1的引用,实质上就是在栈中分配了一个4个字节的空间,用来存储实例化后对象在托管堆中的地址。

第二句实例化object1对象,实质上就是在托管堆中开辟了内存空间来存储类class1的一个具体对象。由此可知,c#不让使用未实例化的对象是因为这

个对象在托管堆中还不存在。当对象不再使用,这个存在栈中的引用变量会被删除,但是托管堆中这个引用指向的对象还是存在的,其空间何时被释放

取决于垃圾收集器而不是引用变量失去作用域。管理的

4.c#除了引用类型的变量,还存在值类型和其他托管堆不能管理的对象,如文件名柄,网络连接和数据库连接,这些变量的释放就需要通过析构函数或

IDisponse借口来做。

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(1)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)