程序运行时内存的各种数据段
2015-08-30 08:23
113 查看
1.简介
在linux系统中,程序在内存中的分布如下所示:
其中 :
.text :代码段,部分是编译后程序的主体,也就是程序的机器指令。保存函数的地址。
BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS段属于静态内存分配。
因为是全局变量,所以在程序运行的整个生命周期内都存在于内存中。有趣的是这个段中的变量只占用程序运行时的内存空间,而不占用程序文件的储存空间。
.data:数据段(data segment)通常是指用来存放程序中已初始化
的全局变量
的一块内存区域。数据段属于静态内存分配。
初始化过的全局变量数据段,该段用来保存初始化了的非0的全局变量,如果全局变量初始化为0,则编译有时会出于优化的考虑,将其放在bss段中。因为也是全局变量,所以在程序运行的整个生命周期内都存在于内存中。与bss段不同的是,data段中的变量既占程序运行时的内存空间,也占程序文件的储存空间。
heap(堆)中保存程序中动态分配的内存,比如C的malloc申请的内存,或者C++中new申请的内存。堆向高地址方向增长。
stack(栈)用来进行函数调用,保存函数参数,临时变量,返回地址等。
在linux系统中,程序在内存中的分布如下所示:
其中 :
.text :代码段,部分是编译后程序的主体,也就是程序的机器指令。保存函数的地址。
BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS段属于静态内存分配。
因为是全局变量,所以在程序运行的整个生命周期内都存在于内存中。有趣的是这个段中的变量只占用程序运行时的内存空间,而不占用程序文件的储存空间。
.data:数据段(data segment)通常是指用来存放程序中已初始化
的全局变量
的一块内存区域。数据段属于静态内存分配。
初始化过的全局变量数据段,该段用来保存初始化了的非0的全局变量,如果全局变量初始化为0,则编译有时会出于优化的考虑,将其放在bss段中。因为也是全局变量,所以在程序运行的整个生命周期内都存在于内存中。与bss段不同的是,data段中的变量既占程序运行时的内存空间,也占程序文件的储存空间。
heap(堆)中保存程序中动态分配的内存,比如C的malloc申请的内存,或者C++中new申请的内存。堆向高地址方向增长。
stack(栈)用来进行函数调用,保存函数参数,临时变量,返回地址等。
相关文章推荐
- BestCoder Round #53 (div.1)
- django 1.8 官方文档翻译: 13-1-1 Django 中的用户认证
- IDA pro 的Python环境变量设置
- 大型网站图片服务器架构的演进
- 学习总结20150829--表格
- 【服务端开发】配置tomcat服务器
- py科学绘图库matplotlib详细教程
- 在 VirtualBox 中使用 Docker Machine 管理主机
- web前端 js中函数的两种常见写法
- django 1.8 官方文档翻译: 2-5-6 多数据库
- web前端 js写的俄罗斯方块
- php大力力 [038节] 全栈工程师的含义
- 微软灯管问题(智力题六)
- 禾尼乡 所波大叔
- 20150830 重新做人
- 世界高城 理塘
- 成为一名嵌入式Linux开发工程师需要学习哪些知识?
- 相克宗 藏民家
- 怎样以快速样式的方式在word文档中生成以下多级自动编号
- Maven安装和入门