何时在.NET紧凑框架中分配内存?如果值和参考类型之间存在差异,请详细说明.赞赏文档或确认步骤.
特别要考虑这种情况......
private MyClass item; // here? public void MyMethod() { item = new MyClass(); // or here? }
Nicholas Man.. 5
分配内存有3种不同的方式.
静态的:
这些在编译时被绑定和分配.例如全局静态变量.
堆栈动态:
这些在运行时绑定并压入堆栈.例如函数调用中的局部变量.
堆动态:
现在堆动态也有一些不同的"子类别",如隐式和显式,但我不会详细介绍.
当你申报时
private MyClass item; // here?
对MyClass的引用被压入堆栈.它只是一个参考,仅此而已.此时它的值为null.
public void MyMethod() { item = new MyClass(); // or here? }
正是在这一点上,通过调用'new MyClass()'然后引用它来在堆上显式分配内存.
实际上,在调用MyMethod之后,您有2个变量.名为item的引用类型,以及堆上的未命名变量,该项引用的类型为MyClass.
分配内存有3种不同的方式.
静态的:
这些在编译时被绑定和分配.例如全局静态变量.
堆栈动态:
这些在运行时绑定并压入堆栈.例如函数调用中的局部变量.
堆动态:
现在堆动态也有一些不同的"子类别",如隐式和显式,但我不会详细介绍.
当你申报时
private MyClass item; // here?
对MyClass的引用被压入堆栈.它只是一个参考,仅此而已.此时它的值为null.
public void MyMethod() { item = new MyClass(); // or here? }
正是在这一点上,通过调用'new MyClass()'然后引用它来在堆上显式分配内存.
实际上,在调用MyMethod之后,您有2个变量.名为item的引用类型,以及堆上的未命名变量,该项引用的类型为MyClass.