asp.net内存中的栈和堆

来源:互联网 发布:厄米特矩阵的性质 编辑:程序博客网 时间:2024/05/19 17:10

asp.net中的内存大概分为栈区和堆区两种,两者的主要作用就是用来存储值类型和引用类型的。所以,在为大家讲解栈和堆之前,我们先了解一下asp.net中的值类型、引用类型这两个概念。

一、值类型

1.隐式派生自System.ValueType ,查看IL,隐式继承自ValueType

2.包括:int、char、double、float、long、short、byte、bool、enum、struct、decimal

3.值类型编译时操作系统为它分配的内存大小是一定的,如int类型占4个字节,char占一个字节。

二、引用类型

1.派生自System.Object

2.包括:字符串、数组、类、接口、委托

3.引用类型的数据大小是不固定的,运行时动态为他们分配内存。

通过上面的简单介绍相信大家已经对值类型和引用类型有了基本的了解。接下来就为大家讲解一下栈区和堆区。

三、栈和堆

1、栈区(stack) — 操作系统分配的一段连续的存储空间 ,其操作方式类似于数据结构中的栈。栈的空间是内存自维护的,即用完即清除。

2、堆区(heap) — 操作系统分配的一段不连续的存储空间,分配方式类似于数据结构中的链表。堆的空间的需要垃圾回收器回收释放。

                            

上面的截图里,左边是栈区,右边是堆区。栈区的一个存储单元放一个值类型的变量,堆区的引用类型可以放在不连续的存储单元内。

通过两个概念的简单讲解,相信大家应该也能猜想到了,操作系统为值类型分配的内存是一定的,所以应该放在栈区,引用类型的大小是不确定的,所以应该放在堆区。


0 0
原创粉丝点击