怎样理解c#中的堆和栈?

如题所述

简单的可以理解为:
heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。
stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。

一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-03
打一个简单的比方,“栈”就是去饭馆吃饭,只要你点了菜,后面的厨师会为你做饭,服务员给你上菜,然后吃完饭你直接走就行了,剩饭垃圾交给饭馆来处理。
而“堆”是你自己在家做饭,由你决定吃什么,然后自己去买菜,做饭,吃完饭后自己收拾剩下的东西,该仍的就扔到垃圾桶里。一个通俗的比喻,应该能讲明白堆和栈的内存的分配以及回收机制了吧。
相似回答