问题1
int i=3;这个我知道,i是存放在栈区的。
int i=new int(3);这个i是不是存放在了堆区?问题2
在C++中,比如我创建了一个类叫Person,那么Person p;就可以实例化了(在C#中要使用new),那么在C++中,这个p是
存放在堆区还是在栈区?

解决方案 »

  1.   

    c++里如此,c#里好像没这种区分,只有引用类型和值类型区分。其实引用类型相当于放入堆区,C#里不用考虑内存问题,只要掌握好引用和值类型区分就可以了。
      

  2.   

    值类型放线程堆栈(Thread Stack,只有1MB),引用对类型放托管堆(Heap).对于类来说,实例化的对象的引用放在堆栈,而对象存储的内容放托管堆. 
      

  3.   

    问题1  两种初始化方式是一样的  int类型都在栈中
    问题2  C#和C++一样   p的地址在栈中  实际p的开辟空间在堆中
      

  4.   

    值:栈中存放具体值。如:数值型
    引用:堆中,存放地址 如:数组,对象。
     
     
    NET将数据类型分为值类型(value type)和引用类型(reference type)一个具有值类型(value type)的数据存放在栈内的一个变量中。即是在栈中分配内存空间,直接存储所包含的值,其值就代表数据本身。值类型的数据具有较快的存取速度。一个具有引用类型(reference type)的数据并不驻留在栈中,而是存储于堆中。即是在堆中分配内存空间,不直接存储所包含的值,而是指向所要存储的值,其值代表的是所指向的地址。当访问一个具有引用类型的数据时,需要到栈中检查变量的内容,该变量引用堆中的一个实际数据。引用类型的数据比值类型的数据具有更大的存储规模和较低的访问速度。http://topic.csdn.net/u/20101023/11/f5f04475-ebfb-423c-99ce-ad32108f4211.html
      

  5.   

    1.没有区别...直接赋值只是实例化的语法糖...2.不要拿C++和.NET比,整个体系都不一样...另外...托管堆和堆在概念上是完全不同的...
      

  6.   

    入门的可以看 你必须知道的.NET
    高级的的可以看 CLR via C#
      

  7.   

    其实,我是从c#中真正理解
    堆与栈,面向对象的概念的int i=3 栈int i=new int(3);
    i 栈(记录new int(3) 在堆里的地址 )
    new int(3) 堆Person p = new Person();
    p 栈
    new Person() 堆
      

  8.   

    问题1
      我为了确认我的想法,试了一下代码,结果发现没有 net int(3) 这种写法
      错误 CS1729: “int”不包含采用“1”个参数的构造函数问题2:
      Person p; // 在栈上构造了对象 p
      Person *pp; // 在栈上为 pp 分配了空间
      pp = new Person; // 在堆上构造了一个 Person 对象,并把地址赋给 pp
      

  9.   

    是的,没有关系
    我的感慨,呵呵
    C++现在正在入门,在C++实现面向对象的思路与数据组织,搞得我头晕;
    用了一阵C#,感觉不错,迫使我对数据方法封装,IDE很友好