C# 堆和栈的简述
来源:互联网 发布:新概念英语配音软件 编辑:程序博客网 时间:2024/05/22 16:51
内存中有一块区域称为栈(Stack),用来存储整形,浮点型,布尔型,字符型等基本数据类型,栈的工作方式很像是弹夹,我们的加子弹和打出子弹,都在弹夹的顶部操作。栈与此类似,压入和弹出数据的操作总是发生在栈的顶部,
操作系统通过栈指针汇总存储的地址读写栈中的数据,当栈为空时,栈指针指向栈的底部,随着数据的不断入栈,栈指针也不断向栈顶部移动,始终指向栈中的下一块自由空间。
栈对数据的操作总是发生在栈的顶部,最后入栈的变量最先弹出,最先入栈的数据最后弹出,因此先入栈数据的作用域总比后入栈的要长,后入栈的数据作用域嵌套在先入栈的数据中,栈的这种工作方式称为后入先出(Last In first out ,LIFO)。
整型,浮点型,布尔型,字符型等简单数据和结构体存储在栈中,称为值类型变量;
栈有非常高的性能,但栈中变量的生存周期都是嵌套的,有时这种要求过于苛刻,在类中,我们希望构造函数创建成员变量后,即使退出构造函数买这些变量仍然存在,其他函数人人可以使用这些变量,为此C#把类的成员变量存储在堆(Heap)上;
栈操作的主要方法:
1,Push()入栈(添加数据)
2,Pop()出栈(删除数据,返回被删除的数据)
3,Peek()取得栈顶的数据,不删除
4,Clear()清空所有数据
5,Count取得栈中数据的个数
堆的工作方式与栈截然不同,
看个例子吧:
{
Cat Grafield= new Cat (“Grafield”,4);
}
创建了一个名为cat的Cat类对象,这个过程分为两步:
1,系统在堆中划分了一快20字节的空间用于存储Grafield对象的成员变量,并调用构造函数初始化对象的成员变量
2,系统在栈中分配了4字节的空间,存储Grafield对象在堆中的首地址,
栈中存储的指向堆中对象的地址为引用,系统通过引用找到堆中的对象
所有的对象都存储在堆中,数组也存储在堆中,它们都称为引用型变量(Reference type)
从上面的例子可以看出,创建引用型变量比创建值类型变量要复杂得多,虽然它会造成一点性能的损失,但可以对数据的生成周期进行非常大的控制。
阅读全文
1 0
- C# 堆和栈的简述
- 堆和栈的功能简述
- 剑指Offer——简述堆和栈的区别
- C# 栈和堆
- C# 堆和栈
- C#中堆和栈的区别
- C# 堆和栈的区别?
- C# 堆和栈的简单介绍
- C#中堆和栈的区别
- C#堆和栈的区别1
- C#堆和栈的区别2
- C#栈和堆的讲解
- C#堆和栈的区别
- C#中栈和堆的异同
- C# 堆和栈的区别
- C#堆和栈的入门理解
- C#堆和栈的区别
- c#中堆和栈的区别
- python re
- html5-localstorage操作(小demo)
- 1的平方加2的平方....一直加到n的平方和是多少?有公式吗
- linux查看端口占用情况
- 文章标题
- C# 堆和栈的简述
- 【C语言】【unix c】信号阻塞和未决信号
- 微信小程序之退款功能
- 【C语言】【unix c】pause(2)使用
- RBF-PID
- 求两个数组的交集
- Java单例
- SVM解二分类,多分类,及后验概率输出
- 【C语言】【unix c】实现sleep函数的功能