Learn asp.net(C#) Base 0.1接触堆栈
本人对于堆栈的了解也不是很深,这里也只是介绍一下,通过学习C#的过程中了解到的堆栈知识。
这里就以一份读书笔记的形式来记录。
堆栈概念的由来也是和内存分不开的:
下文中概念内容引自——《C#图解教程》
运行中的程序使用两个内存区域来存储数据库——栈和堆。
栈:一个内存数组。是一个LIFO(last-in first-out,后进先出)的数据结构。存储几种类型的数据:
某些类系那个变量的值
程序当前的执行环境
传递给方法的参数
栈的特征:
数据只能从栈的顶端插入和删除
把数据放到栈顶成为入栈(push)
从栈顶删除数据成为出栈(pop)
说完了栈的基本特性和概念,下面再说一下堆
堆:一块内存区域。堆中可以分配大块的内存用于存储某类型的数据。
与栈的区别:堆里的内存可以任意顺序存入和移除。虽然如此,但并不能显示的删除它们。【CLR的自动GC--垃圾收集器,在判断出程序的代码将不会再访问某数据项时,自动清除屋主的堆对象。】
***********************************************************************************
顺便说一下,值类型与引用类型。虽然是概念性的东西,个人感觉对于日后的开发工作还是很有理论上的帮助。
类型决定了对象在内存中的存储位置——栈和堆。
类型被分为两种:值类型和引用类型,两者的存储方式在内存中是不同的。
值类型只需要一段单独的内存,用于存储实际的数据。
引用类型需要两段内存:
第一段,存储实际的数据,它总是位于堆中。
第二段是一个引用,指向数据在堆中的存放位置
非成员数据的存储——值类型中数据存放在栈里;引用类型中实际数据存放在堆里而引用存放在栈里。
说了这么多,想必大家也可以清楚的了解了。堆和栈到底是个什么了。
欢迎大家共同探讨。