对于值类型,是存放在堆栈上的。对于引用类型是存放到栈上的。
现在有个问题,加入现在一个类里面有值类型,那么这个值类型是存放在哪里呢。
举个例子
class MyClass1
{
    int a=0;
}
对于这个类,MyClass1 mc=new MyClass1();这样的话,mc是在堆栈上的,MyClass1的实例是在堆上的。那a在哪?
这个问题不太明白,大家帮忙啊

解决方案 »

  1.   

    引用类型是存放到栈上的
    如果用的是.net应该不是这样放的吧
    framework内存是自己管理的,
    记忆中好像是放在托管堆上的,int a=0;a 也应该放在托管堆上
      

  2.   

    当然是在堆上new出来的内存空间都在堆上
    new MyClass1();就是在内存堆上开开辟4个字节的内存空间用于存放int a的值。
      

  3.   

    Stack                          Managed Heap  mc             →                a = 0;
    如果是值类型,比如是struct,那就是:Stack                          Managed Heap  ms
      a = 0;             
      

  4.   


    那mc是存放在哪的呢? 我看书说是放到栈上的。但如果mc是放到类里面呢,他又是存放在哪的,有点晕
      

  5.   

    MyStruct ms=new MyStruct();
    MyClass1 mc=new MyClass1();
    值类型ms,引用类型mc,他们的变量存放在栈上引用类型对象 MyClass1的实例 存放在GC堆上的,因为引用对象用new分配到GC堆上时有索引同步块和类型指针2个字段
    而值类型MyStruct是分配在栈上的对于引用类型中申明的值类型是存放在堆中的,比如你上面的a;因为一个引用类型实例中包含的索引同步块和类型指针2个字段还有非静态成员,这个成员就包括值类型和引用类型.要注意的是说的值类型是struct,而非是int.因为C#中一个字段总是在一个类型中的,所以int x是不会直接出现在栈中的,而总是在一个值类型或一个引用类型中.
      

  6.   


    那是不是只有struct中的值类型才是放到栈上的,而别的都是放到堆上的。
    class MyClass1 

        int a=0; 
    } 如果这句 MyClass1 mc=new MyClass1(); 是在struct中,mc是存放在栈上,否则是在堆上。 是吗
      

  7.   

    死记硬背没什么意义的。
    lz需要了解下内存模型,有很多C++的书会解释这个的。
      

  8.   

    c++貌似没有自动垃圾回收机制吧。不是都靠析构函数吗? 感觉他两个的存放模式不太一样,比如指针在c#是不能指向类的。不过我会看c++的,好久没见它了,呵呵