栈区,堆区,全局区,静态区,代码区,常量区,自由存储区

C:内存基本上分为4部分:静态存储区、堆区、栈区以及常量区。

C++:内存分成5个区,分别是堆、栈、全局/静态存储区、常量存储区和代码区;

内存四区是指:栈区,堆区,全局区,代码区。

 

栈区:

  • 编译器在需要时分配,不需要时自动清除变量的存储区。
  • 局部变量、函数参数..主要用来存放方法中的参数,一些临时的局部变量;
  • 由系统的编译器自动的释放。(方法中的参数一般在操作完后,会由编译器自动的释放掉)

堆区:

  • 动态内存分配;
  • 一般由程序员手动分配释放(动态内存申请与释放),若程序员不释放,程序结束时可能由操作系统回收;
  • 主要用来存放我们动态创建的对象、动态的申请的临时空间;
  • 用malloc或new申请任意内存,程序员自己负责在何处用free或delete释放内存。(生存期由程序员决定)

全局/静态存储区:

  • 静态变量和全局变量的存储区域;
  • 静态区的内存直到程序全部结束之后才会被释放。

代码区:

  • 存放程序的编译后的可执行代码;
  • 只读的CPU执行的机器指令,存放代码(不允许修改,但可以执行)。

常量存储区:

  • 存放不允许修改的常量。

自由存储区:

  • C++中通过new与delete动态分配和释放对象的抽象概念。
  • 自由存储区和堆不是一个概念:自由存储区是指CRT(C运行时库)通过malloc,free函数管理的内存;堆特指通过new,delete管理的内存。
posted @ 2022-05-23 11:48  Siu_Miner  阅读(214)  评论(0编辑  收藏  举报