c++|什么叫做栈区,堆区,全局区,静态区,代码区,常量区,自由存储区()

看了很多内存存储区文档的介绍,比较杂,自己搜集总结一下,要不总是忘,自己总要去搜索,去记。
C的内存基本上分为4部分:静态存储区、堆区、栈区以及常量区。他们的功能不同,对他们使用方式也就不同。 在C++中内存分成5个区,分别是堆、栈、全局/静态存储区、常量存储区和代码区; 【c++|什么叫做栈区,堆区,全局区,静态区,代码区,常量区,自由存储区()】内存四区是指:栈区,堆区,全局区,代码区。
1:栈区(stack)?
栈区:就是那些由编译器在需要的时候分配,在不需要的时候自动清除变量的存储区。里面的变量通常是局部变量、函数参数等。特点:由系统的编译器自动的释放,主要用来存放方法中的参数,一些临时的局部变量等,并且方法中的参数一般在操作完后,会由编译器自动的释放掉。
2:堆区(heap)?
堆区:用于动态内存分配。一般由程序员手动分配释放(动态内存申请与释放),若程序员不释放,程序结束时可能由操作系统回收。此区域主要用来存放我们动态创建的对象、动态的申请的临时空间等。如程序在运行用malloc或new申请任意内存,程序员自己负责在何处用free或delete释放内存。该动态内存的生存期由我们决定。
3:数据区(data seg),也称为(静态区,全局区)
静态变量和全局变量的存储区域是一起的,一旦静态区的内存被分配, 静态区的内存直到程序全部结束之后才会被释放。根据名称我们就应该知道用来存放一些全局的东西,比如我们经常用到的静态变量、全局变量等都会存放到数据区,此区域上的东西都被全局所共享。比如我们可以采取类名.的方式就可以访问到方法,这就是所谓的静态方法,存放到数据区的。const跟非const存储上没区别,只不过是read only的,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。
4:代码区
代码区:就是存放你的程序的编译后的可执行代码的地方了,CPU执行的机器指令,并且是只读的。存放代码(如函数),不允许修改(类似常量存储区),但可以执行(不同于常量存储区)。
5:常量存储区
常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。
6:自由存储区
自由存储区:自由存储是C++中通过new与delete动态分配和释放对象的抽象概念,自由存储区和堆不是一个概念。一般而言,自由存储区是指CRT(C运行时库)通过malloc,free函数管理的内存。堆特指通过new,delete管理的内存。但是在部分编译器的实现上这两块内存都是同一种管理方式。但是在c++情况下是不区分的,自己找资料查询的。

    推荐阅读