Linux应用程序地址布局

在学习Linux应用程序开发时,经常会遇到如下概念:代码段数据段BSS段(Block Started by Symbol,又名:未初始化数据段) 、(heap)和(stack)。而这些部分也是构成Linux应用程序的重要组成部分。

当Linux应用程序在内存中运行的时候,以上组成部分在内存中按如下方式布局:
1.从低地址到高地址分别为:代码段、数据段、BSS段、堆、栈
2.堆向高内存地址生长
3.栈向低内存地址生长
如下图所示:
这里写图片描述
图中0x8048000是虚拟地址。

各个段包含的数据内容:
1.代码段:代码,全局常量(const)、字符串常量
2.数据段:全局变量(初始化以及未初始化的)、静态变量(全局的和局部的、初始化的以及未初始化的)
3.堆:动态分配的区域
4.栈:局部变量(初始化以及未初始化的,但不包含静态变量)、局部只读变量(const,常量)

注意:malloc指针在堆中,malloc分配的空间在堆中。

查看各个段地址的方法:
先用命令ps aux查看程序进程ID。
然后用“cat /proc/ [ID号] /maps”来查看各个段的地址。例如: cat /proc/6505/maps

使用“readelf -S 可执行文件名”来查看BSS段地址。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值