首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一个极其简单又没有人可以回答的清除的有关问题

2012-03-03 
一个极其简单又没有人可以回答的清除的问题定义一个对象和初始化一个对象在内存中的区别如:ObjectoObject

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

热点排行