ELF存储空间到内存的映射关系
来源:互联网 发布:爱淘宝0.2元红包链接 编辑:程序博客网 时间:2024/06/10 21:08
映射关系
- bss段:未初始化的全局变量和未初始化的局部静态变量,不占用程序文件的存储空间,程序启动后分配
#include <stdio.h>int bss_data[1024 * 1024];int main(){ return 0;}
gcc test.c -o bss
du -sh bss
12K bss
- data段:初始化的全局变量和初始化的局部静态变量,占用程序文件的存储空间,也占用运行时的内存空间
#include <stdio.h>int bss_data[1024 * 1024] = {1};int main(){ return 0;}
gcc test.c -o data
du -sh data
4.1M data
rodata段(read only data)
常量数据段,不是所有的常量都放在常量数据段,占用程序文件的存储空间,也占用内存空间
比如字符串常量,全局const变量text 段
存放代码和部分常量,占用程序文件的存储空间,也占用内存空间stack段
临时变量、函数参数,不占用程序文件的存储空间,运行时分配内存heap段
malloc 和new,不占用程序文件的存储空间,运行时申请内存
总结:
- 可执行二进制程序 = text + bss(0) + data + rodata
- 正在运行的C程序 = text + bss + data + rodata + stack + heap
当程序被加载到内存单元时,则需要另外两个域:堆域和栈域,在将应用程序加载到内存空间执行时,操作系统负责代码段、数据段和BSS段的加载,并将在内存中为这些段分配空间。栈亦由操作系统分配和管理,而不需要程序员显示地管理;堆段由程序员自己管理,即显示地申请和释放空间。
注意:
bss段(未手动初始化的数据)并不给该段的数据分配空间. 程序运行后,系统分配内存空间并由系统初始化,默认内存空间的值都为0. section table中保存了BSS段(未初始化的全局变量和未初始化的局部静态变量)内存空间大小总和,所以程序运行后,系统知道该分配多少内存给BSS段。
阅读全文
0 0
- ELF存储空间到内存的映射关系
- 内存区域分配与ELF 之类的关系
- 【存储管理】外部设备存储空间的地址映射
- PE文件到内存的映射
- PE文件到内存的映射
- 将文件保存到内存、SD以及获取手机内部存储与外部存储空间的大小
- 基于文件的内核内存到用户内存的映射
- 业务对象到关系数据库映射的若干模式
- C# Linq定义关系数据库到entity class 的映射
- hibernate继承关系映射到表的总结
- SQL 类型到Java 类型的映射关系
- 关系模型到 Key-Value 模型的映射
- Linux内核源代码情景分析-外部设备存储空间的地址映射
- 继承关系的映射
- hibernate 的映射关系
- Hibernate的关系映射
- hibernate的映射关系
- JPA的关系映射
- 文章标题
- 梯度下降法学习笔记
- Opencv XML/YAML读写教程翻译
- 事件对象
- Dijkstra算法第二套模板程序
- ELF存储空间到内存的映射关系
- Java语言基础【JAVA开发环境 】
- 网络编程(3)-BIO,NIO,AIO
- JDBC中如何通过结果集获取元数据
- (算法分析Week11)Swap Nodes in Pairs[Medium]
- PDF笔记(二):Itext 实际项目案例
- String 是否包含该字符串,使用 contains 和 indexOf 的区别
- 关于图片上传
- Linux中的一些基本命令与目录文件(day01)