【转】C++及java在内存分配上的区别
2013-11-23 23:26
204 查看
转自:http://blog.csdn.net/qinghezhen/article/details/9116053
C++内存分配由五个部分组成:栈、堆、全局代码区、常量区、程序代码区。如下图所示:
1、栈区:函数中定义的局部变量放在栈中,函数执行结束时存储单元自动释放。栈内存分配一般采用寄存器来存取,存取效率高但是内存容量有限。
2、堆区:通常在堆中进行动态分配。程序运行的时候用new或malloc申请一定大小的内存,用delete或free释放之前申请的内存。不管内存空间在何时申请,只要没有用delete或free释放该内存空间就一直被占用着。也就是说,动态内存分配的变量的生存周期由程序员自己决定。程序利用new或malloc申请了一块内存,用完之后没有释放掉,这样这块内存就失去了控制,这就造成了内存泄露。
3、全局代码区:这块内存区域存放的是全局变量、static变量。内存在程序编译的时候就已经分配好,在程序的整个运行期间都存在。在C语言中,全局变量区又分为初始化的和未初始化的。在C++中没有这种区别,它们共同占用这块内存区域。
4、常量区:存放的是常量,不允许修改。
5、程序代码区:存放整个程序的代码。注意,数据和代码是分开存储的。
转自:
C++内存分配由五个部分组成:栈、堆、全局代码区、常量区、程序代码区。如下图所示:
1、栈区:函数中定义的局部变量放在栈中,函数执行结束时存储单元自动释放。栈内存分配一般采用寄存器来存取,存取效率高但是内存容量有限。
2、堆区:通常在堆中进行动态分配。程序运行的时候用new或malloc申请一定大小的内存,用delete或free释放之前申请的内存。不管内存空间在何时申请,只要没有用delete或free释放该内存空间就一直被占用着。也就是说,动态内存分配的变量的生存周期由程序员自己决定。程序利用new或malloc申请了一块内存,用完之后没有释放掉,这样这块内存就失去了控制,这就造成了内存泄露。
3、全局代码区:这块内存区域存放的是全局变量、static变量。内存在程序编译的时候就已经分配好,在程序的整个运行期间都存在。在C语言中,全局变量区又分为初始化的和未初始化的。在C++中没有这种区别,它们共同占用这块内存区域。
4、常量区:存放的是常量,不允许修改。
5、程序代码区:存放整个程序的代码。注意,数据和代码是分开存储的。
转自:
相关文章推荐
- C++ 后缀转换中缀表达式
- C++中缀表达式转换后缀表达式
- 汇编/C/C++/MFC/JAVA/C# 进阶群103197177
- typeid详解
- c++ STL string类的查找、替换和删除操作
- C语言学习之认识exit()函数
- C语言里面堆栈的区别
- 【转载】12个有趣的C语言面试题
- c++ stl string类的基本用法
- 如何在Visual Studio2010上创建一个 C语言程序?!
- 第一个MFC程序编译有感
- 第一个MFC程序编译有感
- C语言把内存的文件保存到硬盘时如何把文件名由用户通过屏幕自己设置,并且保存到指定的路径
- c++ stl学习 传统C字符串用法
- C++ - 类模板(class template) 详解 及 代码
- C++ - 类模板(class template) 详解 及 代码
- 谈谈C语言指针那些陈年旧事
- 随机函数的生成 竞猜数字游戏
- C++打开特定编码格式的文件(utf-8)
- 如何在fedora上编译c或c++文件