(在编译后的文件中称:段 ; 在内存中称:区)
C
1.栈区Stack:局部变量,实参,返回数据,返回地址
2.堆区Heap:malloc()/free()操作的内存空间
3.全局区/静态区:C程序根据全局变量和静态变量有没有进行显示初始化,还将全局区/静态区分为BSS(未初始化)和DATA(已初始化)
4.常量区:存储不能修改的常量(关于局部的字符串常量是存放在全局的常量区还是栈区,不同的编译器有不同的实现)
5.程序代码区:程序二进制代码
==================================分割线==================================
C++
1.栈Stack:局部变量,包括实参
2.堆Heap:new()/delete()操作的内存空间
3.自由存储区:malloc()/free()操作的内存空间
4.全局区/静态区:C++中,编译器给全局变量和静态变量自动赋初值,所以不区分已初始化和为初始化
5.常量区:存储不能修改的常量
6.程序代码区:程序二进制代码
==================================分割线==================================
Java内存空间:
1.堆(线程共享的内存空间):JVM规范中规定,所有对象实例以及数组都要在堆上进行分配
2.栈(线程独有的内存空间):
程序计数器 :每个线程都一个程序计数器,用来表示线程当前需要执行的Java指令地址(这里指的是JVM内存空间地址)
虚拟机栈空间:JVM在执行一个线程的方法时,会为这个线程方法创建一个栈帧(VM栈空间中的一段存储区域)。用于存储局部变量表、操作数栈、动态链接和方法入口信息
本地方法栈空间:本地方法栈则是为虚拟机使用到的Native方法服务
3.方法区(线程共享的内存空间):存储已被JVM加载的类信息、常量和静态变量等数据
-----------------------------------------------------------
Java中各种数据存放区域
1.栈(通常是虚拟机栈):存放基本类型的变量数据及对象的引用
2.堆:存放new出来的对象
3.静态域:存放静态成员(static修饰)
4.常量池:存放字符串常量和基本类型常量(public static final),对于equals()相等的字符串,常量池中永远只有一份
感谢:
http://blog.csdn.net/waitforfree/article/details/38781927
http://www.cnblogs.com/zhaoyl/archive/2012/10/05/2712519.html
http://blog.csdn.net/gatieme/article/details/43567433
http://blog.sina.com.cn/s/blog_60c8379d01015a96.html