在看楚广明老师讲的C#视频时,里面提到了“堆与栈[zhàn]”,很是一头雾水。所以就动手研究了一下。下面是研究的结果,如果和真正的理论意义有出入,还请见谅!
一、堆与栈的定义
堆(heap):
堆是从下往上分配,所以已用的空间在自由空间下面,C#中所有引用类型的对象分配在托管堆上,托管堆在内存上是连续分配的,并且内存对象的释放受垃圾收集机制的管理,效率相对于栈来说要低的多。
栈(stack):
栈是自上向下进行填充,即由高内存地址指向低内存地址,并且内存分配是连续的,C#中所有的值类型和引用类型的引用都分配在栈上,栈根据后进先出的原则,依次对分配和释放内存对象。
下面解释几个关于“堆与栈“方面的名词:
1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其
操作方式类似于数据结构中的栈。
2、堆区(heap) —一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
3、全局区(静态区)(static)