程序内存分配和管理

目录

 C++程序内存区

栈区(stack)

堆区(heap)

全局区(静态存储区static)

常量区(const)

代码区(coding)

堆区和栈区的区别

附加说明:


C++程序内存区

栈区(stack)

  • 编译器自动分配与释放。存放为运行时函数分配的局部变量、函数参数、返回数据、返回地址等。
  • 常用于在编译期间就能确定存储大小的变量的存储区,在函数作用域内创建,离开时自动销毁。
  • 存储空间是连续的。

堆区(heap)

  • 程序员人为分配(new或malloc),如果程序员没有释放,会出现内存泄漏问题。
  • 常用于在编译期间无法确定存储大小的变量的存储区
  • 存储空间是不连续的,容易产生内存碎片。
  • 理论上堆的内存大小不受限制,最大可达4GB。

全局区(静态存储区static)

  • 存放全局变量、静态数据、常量。
  • 和“栈”一样,常用于在编译期间可以确定存储大小的变量的存储区。
  • 全局区分为已初始化全局区和未初始化全局区,由系统释放。
  • 静态全局变量、静态局部变量和全局变量均属于该区。

常量区(const)

  • 存放常量字符串,程序结束后由系统释放。
  • 和“全局区(静态存储区)”一样,常用于在编译期间可以确定存储大小的常量的存储区。
  • 较为特殊,存储的是常量,不允许修改。

代码区(coding)

  • 只读区域。运行该可执行文件的多个进程均可以共享该区域(共享是为了让频繁执行的代码在内存中只有一份代码,只读是为了防止程序以外的修改它的指令)。
  • 存放程序代码,函数体(类成员函数和全局区)的二进制代码。

堆区和栈区的区别

附加说明:

若要简单区分,C++内存区可以分为:

 

おすすめ

転載: blog.csdn.net/qq_38844835/article/details/119233899