您的位置:首页 > 编程语言 > C语言/C++

【转】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、程序代码区:存放整个程序的代码。注意,数据和代码是分开存储的。

转自:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: