比如说  String str = "aa";
         int  i = 2;"aa" ,2 都放在内存什么地方最后能略加点说明  呵呵 谢谢

解决方案 »

  1.   

    可以参考一下
    http://topic.csdn.net/u/20100606/10/4b6f8e50-7af2-4552-8148-0e0d8e4813f2.html
    中五楼的回复。对象分为全局对象、静态对象、栈中分配的对象,以及堆中分配的对象。
    其中:
    全局对象和静态对象存储在静态存储区;
    局部对象存储在栈中;
    动态对象存储在堆中。下面举例说明。
    //test.hclass A
    {
    }extern A g_obj; //全局对象g_ojb的声明//test.cpp
    #include "test.h"A g_ojb; //全局对象g_ojb的定义,存储在静态存储区int fun()
    {
      static A static_obj; //静态对象的声明和定义,存储在静态存储区  A local_obj; //局部对象local_obj的声明和定义,存储在栈,其生命周期在fun函数退出时结束,也就是说fun函数return之后,会自动调用local_obj的析构函数来释放资源  A* p_dynamic_obj = new A(); //p_dynamic_obj指向动态对象,存储在堆中,需要通过delete p_dynamic_ojb来释放其所指向的对象  return 0;
    }
      

  2.   

    可以拿JAVA说下嘛?c不熟悉......
      

  3.   

    额。我的粗见是:str是放在栈内存,aa是放在堆内存然后int i=2;中的2也是放在堆内存一般引用数据类型都放在栈内存,而其内容则放在堆内存。当然这也是相对的。比如String[] str;
    其中str就是一个引用数据类型(String 数组),其值是放在栈内存,而当我们有:str=new String[2];
    str[1]="a";时,其中str[1]也是就是放在堆内存(引用),相应的str[1]="a"中的a是也是放在堆内存;
    表达得不太好。例子也是临时想出来的。呵呵。。说得不好见怪了。
      

  4.   

    内存分为heap、satck、data segment、code segment
    所以new出来的东西放在heap里面,局部变量放在stack里面,至于常量、静态变量是放在data segment里面的
    所以你说的‘aa’和2是放在data segment里,str和i持有引用放在stack里面
      

  5.   

    那个说的很好了啊·这不是C是JAVA