【Linux编程】C程序的存储空间布局

一个C程序由下面几个部分组成:
  • 正文段。存放CPU执行的机器指令。唯一、只读。
  • 初始化数据段(即数据段)。已赋值的全局变量。
  • bss段。未初始化的全局变量。程序执行之前,内核将此段中的数据初始化为0或null。
  • 栈。连续内存,大小固定(可用ulimit -s命令查看)。
  • 堆。链表结构,空间较大。
这几个段在存储器中的布局为:
低地址→正文段(exec从文件读入)→数据段(exec从文件读入)→bss段(由exec初始化为0)→堆(向高地址扩展)→栈(向低地址扩展)→命令行参数和环境变量→高地址



还有一点需要注意,程序文件中只存放正文段和数据段,不存放bss段,内核在启动程序之前将 bss段清零 。使用size命令可以查看程序各段大小(单位:字节):


第四列和第五列分别是四个段的总长度。

参考:
《unix环境高级编程》 P152-P154.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值