C/C++程序的内存模型

C/C++程序的内存模型

我们先看着下面这一张我在下面参考文章1中找到的关于内存的图片,通过自己的理解分析一下。
在这里插入图片描述

  1. stack,即栈区。
  2. heap,即堆区。
  3. bss,即未初始化数据区。存放未初始或者初始化为0的全局变量和静态变量。生命周期是整个程序运行期间。
  4. gvar(global value),及数据区也叫data区。存放初始化不为0的全局变量和静态变量。生命周期是整个程序运行期间。
  5. text,即代码区。存放可执行文件的二进制代码以及常量(字符串常量和常变量)。生命周期是整个程序运行期间。

通常将内存分为五个区:栈区堆区全局区/静态区常量区代码区。(也可以分为四个区,分别是栈区、堆区、全局区、代码区,将常量区归纳到全局区里面了)

1、栈区:由系统进行内存的管理。主要存放函数的参数以及局部变量。在函数完成执行,系统自行释放栈区内存,不需要用户管理。

2、堆区:它由编程人员手动申请,手动释放,若不手动释放,程序结束后由系统回收,生命周期是整个程序运行期间。

3、全局区/静态区:全局静态区内的变量在编译阶段已经分配好内存空间并初始化。,它主要存储全局变量、静态变量。生命周期是整个程序运行期间。(包括了图上的bss和gvar)

4、常量区:用于存放字符串常量以及const修饰的全局变量。特点:只读。生命周期是整个程序运行期间。

5、代码区:存放函数体的二进制代码。特点:共享、只读

参考文章:
1、https://blog.csdn.net/jirryzhang/article/details/79518408
2、https://blog.csdn.net/weixin_41565755/article/details/90481710
3、https://blog.csdn.net/ganpengjin1/article/details/38269989

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值