【深入理解C++】内存布局

关于 C++ 的内存布局,网上说法不一,有人将其分为 4 4 4 区,也有人将其分为 5 5 5 区,不同的人分成的 5 5 5 区也不尽相同,造成这种差异的主要原因是C语言和C++语言的发展背景、个人的分类喜好、个人的命名习惯等。

在本文中,笔者将 C++ 内存详细分为 5 5 5 个区域,如下图所示。

在这里插入图片描述

  • 栈区:由编译器自动分配和释放,主要存放函数的参数值、局部变量值等。

  • 堆区:由程序员主动分配和释放,可以通过 malloc()/free() 或 new/delete 来分配和释放。

  • 全局/静态存储区:全局变量和(局部)静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域(C语言区分初始化的和未初始化的,C++没有这个区分)。程序结束后由系统释放。

  • 常量存储区:存放我们代码中的常量、字符串常量等,这样做的目的是为了节省空间,避免重复申请内存。程序结束后由系统释放。

  • 程序代码区:存放函数体(包括类的成员函数、全局函数)的二进制代码。

堆和栈的区别:

  • 栈:空间是有限的,分配速度快,程序员控制不了。
  • 堆:只要不超出实际拥有的物理内存,同时也在操作系统允许能够分配的最大内存大小之内,都可以分配成功。分配速度比栈慢,程序员可以随时用 malloc()/free() 或 new/delete 来分配和释放,非常灵活。

参考文章:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值