我对 Stack vs Heap 之间的内存分配基础感到困惑。按照标准定义(每个人都说),所有 值类型 都将分配到 堆栈上, 而 引用 类型将放入 堆中 。
现在考虑以下示例:
class MyClass { int myInt = 0; string myString = "Something"; } class Program { static void Main(string[] args) { MyClass m = new MyClass(); } }
现在,如何在c#中进行内存分配?MyClass(m)的对象会完全分配给堆吗?也就是说,int myInt和string myString既会去堆?
MyClass
m
int myInt
string myString
还是将对象分为两部分,并分配给两个存储位置,即堆栈和堆?
m在堆上分配,其中包括myInt。在方法调用期间,在堆栈上分配原始类型(和结构)的情况是在方法调用期间,该方法为堆栈上的局部变量分配空间(因为它更快)。例如:
myInt
class MyClass { int myInt = 0; string myString = "Something"; void Foo(int x, int y) { int rv = x + y + myInt; myInt = 2^rv; } }
rv,x,y都将在堆栈中。myInt在堆上的某个位置(必须通过this指针进行访问)。
rv
x
y
this