请问各位大牛:C#引用类型存储对值的引用,这个里面的值来自什么地方?是堆中,还是栈?如果去内存中读取一个引用类型,具体是怎么走的?是先去堆,还是去栈?请帮忙解答,这个问题困扰我很久,十分感谢,各位~

解决方案 »

  1.   


    所有东西都在堆里中吗?String如何理解呢,
    为什么说在创建一个string的时候,会创建两个对象,一个在堆中,另外一个在栈中?
      

  2.   

    不是所有东西都在堆中,值类型的数据一般会在栈中,string有点特殊,string的内容通常分配在堆中,而在栈中是它的指针,因为string是非常常用的一种数据类型,所以考虑到效率,而使用了指针。
      

  3.   

    string str="wo";
    str="ta";
    现在内存中有两个string了。而不是一个。
      

  4.   


    public Class A
    {
    public string a{get;set;}
    }
    A testa=new A();
    testa.a="test";这个堆和栈是如何运行的呢?值"test",放在什么地方
      

  5.   

    感谢这个ch_fb大牛的回复 那请问一下
    public Class A
    {
    public string a{get;set;}
    }
    A testa=new A();
    testa.a="test";这个堆和栈是如何运行的呢?值"test",放在什么地方这个可以帮忙分析一下吗?谢谢
      

  6.   

    若上述语句出现在函数中,则局部对象 testa 的“把柄”在栈中,而 testa 的对象体在堆中。
    testa.a 的“把柄”在 testa 的对象体(容器)中, testa.a 的对象体在堆中的另一个角落。
      

  7.   

    不是在“另一个角落”,是很确定地在托管堆某个较固定的区域...字符串的值都在驻留池中,这跟其他引用类型对象不同...ps:关于5楼所谓的“string有点特殊”,其特殊性跟所谓指针、堆栈都没有任何关系...