c进程内存布局说明

从内存低地址到内存高地址:


text:代码段/存放程序的全部代码(指令),来源于二进制可执行文件中的代码部分,在编译的时候就已经放置到二进制文件中。

initialized data: data段

uninitialized data:bss段 

以上两者组成了数据段。其中data段存放的是已经初始化的全局变量和已经初始化的static局部变量,来源于二进制可执行文件中的数据部分,这部分在编译的时候就已经放置到二进制文件中;bss段存放的是未初始化全局变量和未初始化static局部变量,其内容不来源于二进制可执行文件中的数据部分(也就是说:二进制可执行文件中的数据部分没有未初始化全局变量和未初始化static局部变量)。根据c语言标准规定,它们的初始值必须为0,因此bss段存放的是全0.


heap:堆 负责分配malloc

stack:栈 存放的是动态局部变量。也就是函数内部定义的变量。需要注意的是栈顶是朝向内存低地址的,和heap堆正好相对。当子函数返回时,系统的栈会向内存高地址延伸,这相当于释放子函数的动态局部变量的内存空间。假设main函数在调用子函数a后立即调用子函数b,那么子函数b的动态局部变量就会覆盖原来子函数a的动态局部变量的存储空间。这就是子函数不能互相访问对方动态局部变量的根本物理原因。

内存的最高端存放的是命令行参数和环境变量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值