一个极其简单又没有人可以回答的清除的问题
定义一个对象 和初始化一个对象在内存中的区别
如:
Object o;
Object o=new Object();
以上两句代码 导致线程堆栈和托管堆中分别会出现什么样的变化
------解决方案--------------------Object o;只是在栈中压入了一个变量。
Object o = new Object();其实做了三件事情,1、在栈中压入一个变量o 2、在堆中创建一个Object对象 3、讲堆中Object对象的内存地址赋值给变量o
至于堆中是如何创建对象的,这就要涉及到clr的原理了。clr有一个称之为nextptr的东西,它总是指向一个下一个要分配的内存地址。当调用new语句时,首先判断该对象所需要的内存空间,如果有足够的内存空间则把这块内存空间的所有字节初始为0,然后调用构造函数来为这块内存中的内容进行赋值。最后讲nextptr的地址返回,并且nextptr移动到下一个未赋值的内存地址。
当时就是这样的!