对比常量存储与堆栈
2013-12-03 20:34
162 查看
翻译人员: 铁锚
翻译时间: 2013年12月3日
原文链接:
Static Storage vs Heap vs Stack
下面是对编译器内存分配的总结:
1. 静态分配 vs 动态分配
静态分配: 编译器只依赖于程序代码中的字面量就可以进行分配的部分。静态分配尽可能多地分配数据对象,原因之一是这些对象的地址可以编译成目标代码。
动态分配: 在程序运行过程中代码执行到特定位置才可以进行分配。
2. 静态分配(Static)
全局常量以及其他由编译器生成的数据(例如 为垃圾回收而生成的信息)是属于静态分配的。静态变量在代码执行之前绑定到内存单元,并且在整个程序执行过程中都指向相同的内存单元.例如: C的静态变量
优点: 高效(直接寻址),支持子程序访问中间结果(history-sensitive).
缺点: 缺乏灵活性, 就如 Fortran一样,如果这是唯一的变量则不能循环利用.(no recursion if this is the *only* kind of variable)
3. 堆
如果数据对象比创建自身的函数(方法)的生命周期更长,则通常分配在堆内存(Heap)中,例如: 从一个过程传递到另一个过程的对象可以通过new来创建.
堆内存的大小在编译时没有确定,只可以通过指针或者引用来使用这些对象,例如: C++中的 动态对象(dynamic objects),以及Java中的所有对象.
优点: 提供了动态存储管理.
缺点: 效率相对较低,有时会出现各种可靠性问题.
4. 栈
方法/过程内部的局部变量分配在栈(Stack)上, 栈的大小才编译期也是不能确定的。
优点:
允许循环利用(allows recursion)
节约内存空间(conserves storage)
缺点:
分配和重分配的开销
子程序对历史数据不敏感(一般不能访问中间结果)
低效的引用(间接寻址)
Java 数组在内存中的结构
How
Java Compiler Generate Code for Overloaded and Overridden Methods?
Java
对象在堆中的内存结构
JVM 运行时数据区
翻译时间: 2013年12月3日
原文链接:
Static Storage vs Heap vs Stack
下面是对编译器内存分配的总结:
1. 静态分配 vs 动态分配
静态分配: 编译器只依赖于程序代码中的字面量就可以进行分配的部分。静态分配尽可能多地分配数据对象,原因之一是这些对象的地址可以编译成目标代码。
动态分配: 在程序运行过程中代码执行到特定位置才可以进行分配。
2. 静态分配(Static)
全局常量以及其他由编译器生成的数据(例如 为垃圾回收而生成的信息)是属于静态分配的。静态变量在代码执行之前绑定到内存单元,并且在整个程序执行过程中都指向相同的内存单元.例如: C的静态变量
优点: 高效(直接寻址),支持子程序访问中间结果(history-sensitive).
缺点: 缺乏灵活性, 就如 Fortran一样,如果这是唯一的变量则不能循环利用.(no recursion if this is the *only* kind of variable)
3. 堆
如果数据对象比创建自身的函数(方法)的生命周期更长,则通常分配在堆内存(Heap)中,例如: 从一个过程传递到另一个过程的对象可以通过new来创建.
堆内存的大小在编译时没有确定,只可以通过指针或者引用来使用这些对象,例如: C++中的 动态对象(dynamic objects),以及Java中的所有对象.
优点: 提供了动态存储管理.
缺点: 效率相对较低,有时会出现各种可靠性问题.
4. 栈
方法/过程内部的局部变量分配在栈(Stack)上, 栈的大小才编译期也是不能确定的。
优点:
允许循环利用(allows recursion)
节约内存空间(conserves storage)
缺点:
分配和重分配的开销
子程序对历史数据不敏感(一般不能访问中间结果)
低效的引用(间接寻址)
Java 数组在内存中的结构
How
Java Compiler Generate Code for Overloaded and Overridden Methods?
Java
对象在堆中的内存结构
JVM 运行时数据区
相关文章推荐
- 对比常量存储与堆栈
- 对比常量存储与堆栈
- 在C++中各种变量常量的存储对比
- C++内存管理__内存管理(栈、堆(new/delete)、自由存储区(malloc/freee)、全局/静态存储区、常量区)!堆栈内存管理方式的区别
- 堆栈详解 常量字符串为什么位于静态存储区
- 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理]
- 常量字符串为什么位于静态存储区?
- C/C++中,内存中数据存储分成4个区:堆、栈、全局/静态存储区和常量存储区。
- 堆栈基本操做&&顺序存储
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
- n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系, 存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j 的队伍中更强的一支。
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
- 堆、栈、自由存储区、全局/静态存储区和常量存储区
- 【对比分析一】常用的浏览器本地存储方案介绍和对比
- 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区
- KV存储的对比
- 顺序存储堆栈
- iOS数据存储的四种方案对比
- mysql存储引擎的对比(一)
- 计算机中栈区,堆区,静态存储区,文字常量存储区,代码区的详细解释