C/C++ & JAVA 内存布局

6 篇文章 0 订阅
3 篇文章 0 订阅

(在编译后的文件中称:段 ; 在内存中称:区)


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值