【精品博文】Linux应用程序地址布局

一、程序构成

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

二、内存布局

当Linux应用程序在内存中运行的时候,以上组成部分在内存中以如下图的方式布局。


  1. 从低地址到高地址分别为:代码段、数据段、BSS段、堆、栈

  2. 堆向高内存地址生长

  3. 栈向低内存地址生长


三、编写代码查看程序各段地址

编辑如下代码:addr.c

抓取内存信息:


  • 代码段位于 400000 - 401000

  • 数据段位于 600000 - 601000

  • BSS段位于 601000 - 602000

  • 堆空间位于 6ab000 - 6cc000

  • 栈空间地址非常高


四、变量存放段补充


.data段:

  • 全局、已初始化

  • 全局、静态、已初始化

  • 局部、静态、初始化

.BSS段:

  • 全局、未初始化

  • 全局、静态、未初始化

  • 局部、静态、未初始化

.code段:

  • 全局、常量(const)

  • 字符串常量

.stack段:

  • 局部、初始化

  • 局部、未初始化

  • 局部、常量(const)

.heap段:

  • malloc分配局部变量


注意:

可以通过下面命令读取相关程序的内存分配:

通过输出结果可以分析数据段的分配。

(0)

相关推荐

  • 「粉丝问答10」C语言关键字static的使用详解

    本文配套视频地址如下: <关键字static的使用详解> 粉丝提问 粉丝问题,总结一下:关键字static的使用方法. 问题 要想搞清楚关键字static的使用方法,必须首先搞清楚,可执行 ...

  • C/C++ Memory Layout

    为什么需要知道C/C++的内存布局和在哪可以可以找到想要的数据?知道内存布局对调试程序非常有帮助,可以知道程序执行时,到底做了什么,有助于写出干净的代码.本文的主要内容如下: 源文件转换为可执行文件 ...

  • 全栈必备 :C语言基础

    [引子]温故而知新,"三日不弹,手生荆棘",代码也是如此.另一方面,自己挖的坑要自己填.在<全栈的技术栈设想>中埋下了4种编程语言的伏笔,已经兑现了Javacript, ...

  • 【精品博文】nios程序烧写到epcs方法

    折腾了好久,才把nios程序烧写到epcs方法弄明白,网上搜了下,这方面资料很多,看了半天也没怎么弄明白,无奈,只好去找官方文档,看完,只想说,官方文档确实给力.下面列出参考资料,并跟大家分享个人经验 ...

  • 【精品博文】linux make命令输出高亮

    最近调试代码,make 输出信息的时候 error .warning 等信息都是和普通信息一样白色打出来的,和普通信息一样很难区分.每次就要在茫茫多的输出信息中找那个小小的error 才看是哪一行出了 ...

  • 【精品博文】linux编程之 Core Dump

    一.Core Dump 定义 Core Dump 又叫核心转存.当程序在运行过程中发生异常,这时Linux系统可以把程序出错的内存内容存储在一个core文件中,这种过程叫 core Dump. Cor ...

  • 【精品博文】Linux QT镜像的制作--制作SD卡启动盘

    最近买了个新的开发板,原生的是Android操作系统,需要自己少个启动盘,制作Linux+QT操作系统. 新的开发板带这个制作的源文件,要先把这个文件拷贝到虚拟机Ubunbtu的共享目录下. 打开sh ...

  • 【精品博文】详细解析基于FPGA的VGA控制器显示字符程序

    一个双肩背包 有多难? 戳一下试试看! →_→ 长摁识别 [主题]:详细解析基于FPGA的VGA控制器显示字符程序 [作者]:LinCoding VGA大家一定不陌生,本篇文章就详细解析下基于FPGA ...

  • 【精品博文】详细解析基于FPGA的IIC程序

    一个双肩背包 有多难? 戳一下试试看! →_→ 长摁识别 [主题]:详细解析基于FPGA的IIC程序 [作者]:LinCoding [时间]:2016.12.04 [声明]:转载.引用,请注明出处 今 ...

  • 【精品博文】关于zynq linux开发的一点收获

    这两个月在专业方面落下了不少,下了班之后,基本都是玩.聊天.看视频什么,锻炼身体也不是很多.直到最近,一来是觉得自己有些不像话,有些事一拖再拖,二来是觉得玩得无聊,三是看到别人都那么努力,自己这样子实 ...

  • 【精品博文】我的第一个裸板程序

    初学ARM感觉写个裸板程序还真的不容易,可能是没有用到ADS,keil之类的开发平台的缘故吧.编译,链接过程在linux平台上完成,这样学起来更有实感,还能顺便熟悉linux环境,以及命令,何乐而不为 ...

  • 【精品博文】IAR下使用noinit段的方法和指定地址的变量分配

    noinit段对我们大多数搞单片机开发者来说并不陌生,该段如果被使用的话是会被编译器自动分配到芯片SRAM的一块区域中(注意是RAM区而非Flash),在该段定义的变量在除了掉电之外的任何芯片复位的情 ...