关于C#堆与栈区别

2024-12-19 06:16:41
推荐回答(1个)
回答1:

C#中的堆(heap)是你实例化对象时,存放对象本体的地方;
而栈(Stack)是函数调用时,存放传递函数参数以及函数内数值变量的地方;
例子:
MyClass c1 = new MyClass;
MyClass c2 = c1;
在堆中建立一个MyClass(对象本体在堆中)然后将对该对象的引用放入(赋值)给c1;然后再让c2引用同一个在堆中的对象;这样c1和c2引用了同一个对象。

假设MyClass中有个方法
class MyClass
{
public int Add(int x, int y)
{

int sum = x + y;

return sum

}

}

当调用这个方法时
int z = c1.Add(10, 20)
那么参数10、20就是通过栈传递到Add方法中的;另外,在函数Add中,局部变量 sum 也在栈里!
栈的特点是,一旦调用结束后,所有存放在栈上的变量都被消除了(调用结束的清栈处理)