【转】C++及java在内存分配上的区别

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

转自:

原文地址:https://www.cnblogs.com/sunada2005/p/3439604.html