【精品博文】Linux应用程序地址布局
一、程序构成
在学习Linux应用程序开发时,经常会遇到如下概念:代码段、数据段、BSS段等。BSS(Block Started by Symbol,又名:未初始化数据段)、堆(heap)、栈(stack)而这些部分也是构成Linux应用程序的重要组成部分。
二、内存布局
当Linux应用程序在内存中运行的时候,以上组成部分在内存中以如下图的方式布局。
从低地址到高地址分别为:代码段、数据段、BSS段、堆、栈
堆向高内存地址生长
栈向低内存地址生长
三、编写代码查看程序各段地址
编辑如下代码:addr.c
抓取内存信息:
代码段位于 400000 - 401000
数据段位于 600000 - 601000
BSS段位于 601000 - 602000
堆空间位于 6ab000 - 6cc000
栈空间地址非常高
四、变量存放段补充
.data段:
全局、已初始化
全局、静态、已初始化
局部、静态、初始化
.BSS段:
全局、未初始化
全局、静态、未初始化
局部、静态、未初始化
.code段:
全局、常量(const)
字符串常量
.stack段:
局部、初始化
局部、未初始化
局部、常量(const)
.heap段:
malloc分配局部变量
注意:
可以通过下面命令读取相关程序的内存分配:
通过输出结果可以分析数据段的分配。
赞 (0)