二.程序在内存中的分布:堆,栈,全局区,代码区

C语言是非常贴近底层的一门编程语言,那么在学习C语言的过程中,就需要对程序运行的底层机制有所了解。关于底层机制,有一个非常重要的知识点:程序在内存中是如何分布的。

下面有一张图:

1097927-20180724163319830-302594590.png

从上图可知,程序执行过程中有以下几个步骤:

  1. 系统将程序从硬盘加载到内存
  2. 然后在内存中将程序分为四个部分分别存储
  3. 最后找到main函数,开始执行

对于C程序员来说,掌握第2步中的内存四区是非常有必要的。那么内存四区是那四区呢,它们分别有那些功能和特性?

带着疑问,我在网络上查阅了相关资料,整理如下:

内存四区通常是指:堆 栈 全局区 代码区

特性如下:

堆区(heap)

堆区的内存需要由程序员自己申请,自己释放(例如malloc)。若未手动释放,则在程序结束后系统会自动回收。

栈区(stack)

栈区的内存由系统申请,一般用来存储函数的参数值和局部变量的值等。在对应的生存周期结束后系统将回收栈区的空间(例如函数的局部变量)。

全局区(global)

全局区的内存由系统管理,用来存储常量和全局变量(例如字符串常量“21313”)。

代码区(code)

代码区理解起来很简单,就是存储了程序运行的二进制代码

需要注意的是,每一个程序都有一个独立的内存四区

以上就是内存四区的基本内容

转载于:https://www.cnblogs.com/hanhuo/p/9360817.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值