一尘不染

内存分配:堆栈还是堆?

c#

我对 Stack vs Heap 之间的内存分配基础感到困惑。按照标准定义(每个人都说),所有 值类型 都将分配到 堆栈上,
引用 类型将放入 堆中

现在考虑以下示例:

class MyClass
{
    int myInt = 0;    
    string myString = "Something";
}

class Program
{
    static void Main(string[] args)
    {
       MyClass m = new MyClass();
    }
}

现在,如何在c#中进行内存分配?MyClassm)的对象会完全分配给堆吗?也就是说,int myIntstring myString既会去堆?

还是将对象分为两部分,并分配给两个存储位置,即堆栈和堆?


阅读 222

收藏
2020-05-19

共1个答案

一尘不染

m在堆上分配,其中包括myInt。在方法调用期间,在堆栈上分配原始类型(和结构)的情况是在方法调用期间,该方法为堆栈上的局部变量分配空间(因为它更快)。例如:

class MyClass
{
    int myInt = 0;

    string myString = "Something";

    void Foo(int x, int y) {
       int rv = x + y + myInt;
       myInt = 2^rv;
    }
}

rvxy都将在堆栈中。myInt在堆上的某个位置(必须通过this指针进行访问)。

2020-05-19