程序运行内存——堆和栈
程序运行时,它的数据必须存储在内存中。一个数据项需要多大的内存、存储在什么地方、以及如何存储都依赖与该数据项的类型。
运行整的程序使用两个内存区域来存储数据:堆和栈。
栈:
系统接管所有的栈的操作。作为 程序员,不需要显示的对它做任何事情。但了解栈的基本功能可以更好的了解程序在运行时正在做什么。
栈是一个内存数组,是一个LIPO(last-in first-out,先进后出)的数据结构。栈存储的几种数据类型:
一般值类型都存放在栈中。
某些类型变量的值:例如int double 结构类型和枚举类型等
程序当前的执行环境;
传递给方法的参数。
栈的特征:
栈有如下几个普通特征:
数据只能从栈顶端插入和删除;
把数据放到站顶称为入栈(push);
从栈顶删除数据称为出栈(pop)。
堆:
对是一块内存区域,在队里可以分配大块的内存用于存储某些类相关的数据。与栈不同,堆里的内存可以任意存入和移除。
接下来的图展示了一个在堆里放了4项数据的程序。
堆里存放的类型是引用值类型:包括数组、接口、类等~
虽然程序可以再堆里保存数据,但并不能显示的删除它们。CLR的自动GC(Garbage Collector,垃圾收集器)在判断出程序的代码将不会再访问某数据项时,自动清除无助的堆对象。我们因此可以不再操心这项使用其他编程语言时非常容易出错的工作了。
此图阐明了垃圾收集过程:
好了,栈和堆我就先介绍这么多了,画了半天的图,真心不好受啊~~~~~~