日期:2014-05-19  浏览次数:20815 次

一个极其简单又没有人可以回答的清除的问题
定义一个对象   和初始化一个对象在内存中的区别
如:
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移动到下一个未赋值的内存地址。
当时就是这样的!