日期:2014-05-18  浏览次数:20899 次

堆与堆栈.请说出你的理解...
问题:
堆与堆栈.
描述:
C# code

//i是保存在堆栈中.
int i=0;

//现在定义一个类
public class test1()
{
//ii也是保存在堆栈中.
int ii=1;
}

//现在再定义一个类
public class test2()
{
//aa也是保存在堆栈中.
int aa=1;
//t1保存在堆中
test1 t1= new test1();
}



现在的问题是.1-------在类test2中,t1的数据(或是成员都是保存在堆中)
但是我们再看类test1中ii是保存在堆栈中的.
----我们再加一个类
public class test3()
{
//aa也是保存在堆栈中.
int bb=1;
//t1保存在堆中
test2 t2= new test2();
}
问题2----.我们数据是怎样访问的.从test3开始.
(
本人的理解.
---1.先堆栈中***** bb
---2.堆栈中*******t2(那t2的数据怎么放.假如下面的吧)
---3.堆中*********t2的数据包括aa和t1(t1的数据怎么放.还有aa的数据怎么放.)
---4.堆栈中********t1
.............
哎写不出来.真的不明白.

)

------解决方案--------------------
首先不存在堆栈这个数据结构,只有栈和堆

int i=0; //在方法内定义就是在栈上

//现在定义一个类
public class test1()
{
int ii=1; //它存在test1对象的空间上也就是堆上
}

//现在再定义一个类
public class test2()
{
int aa=1; //同上
test1 t1= new test1(); //在test2的内存空间中,堆上
}

------解决方案--------------------
可以这么说。

.net已经尽量在让程序员SB化了。

.net本身已经作了太多的事情。搞.net不用自己去维护内存空间。。。
但还是要了解一下。。。

.net中所有的值类型都是放在堆上面的。引用都放在栈上。

也可以这么说,堆里放的是数据,,栈上放的是指向数据的指针。。。