c#中堆区和栈区的区别!

c#中堆区和栈区的区别!

堆:是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便,另外,在WINDOWS下,最好的方式是用VirtualAlloc分配内存,他不是在堆,也不是在栈是直接在进程的地址空间中保留一快内存,虽然用起来最不方便。但是速度快,也最灵活。

栈:由系统自动分配,速度较快。但程序员是无法控制的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-12-18
1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
第2个回答  2009-12-18
区别就是存放的数据类型不同。

堆,是存放引用类型的
栈,是存放值类型的

string inStack = "在堆中";
inStack 这个对象变量就是在栈中了,而它是引用类型,那么它的value就在堆中了。

int inStack = 123;
这个123也是在栈中,inStack是int类型,值类型。
相似回答