• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

关于c#栈与堆的理解

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最近在公司实习,主要业务是工业软件,用.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接口来做。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#程序调用cmd执行命令(转)发布时间:2022-07-10
下一篇:
C#冒泡排序你还会吗?发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap