ELF中的.data段和.bss段
.data 段:
已初始化的全局变量和局部静态变量都保存在 .data 段。
.bss 段:
未初始化的全局变量和局部静态变量默认值都为 0,本来它们也可以被放在 .data 段的,但是因为它们都是 0,所以为它们在 .data 段分配空间并且存放数据 0 是没有必要的。
程序运行的时候它们的确是要占内存空间的,并且可执行文件必须记录所有未初始化的全局变量和局部静态变量的大小总和,记为 .bss 段。
因此,.bss 段只是为未初始化的全局变量和局部静态变量预留位置而已,它并没有内容,所以它在文件中也不占据空间。
备注:
是否将未初始化的全局变量放在 .bss 段跟不同的语言与不同的编译器实现有关,有些编译器会将未初始化的全局变量存放在目标文件 .bss 段,有些则不存放,只是预留一个未定义的全局变量符号,等到最终链接成可执行文件的时候再在 .bss 段分配空间。
查看段大小的命令:
$ objdump -h elf_file$ size elf_file
参考资料:
1、《程序员的自我修养--链接、装载与库》,俞甲子,石凡,潘爱民,电子工业出版社。
ELF中的.data段和.bss段相关推荐
- C:谈谈内存分配中的(.data)段和(.bss)段的区别?为什么要分.data段和.bss段?
区别: .data段: 存放已初始化的全局变量.在编译器编译的时候,会给已初始化的数据分配内存空间,数据保存在目标文件中. .bss段: (bss是英文Block Started by Symbol的 ...
- Text段、Data段和BSS段
不同的compiler在编译的过程中对于存储的分配可能略有不同,但基本结构大致相同. 大体上可分为三段:Text段.Data段和BSS段. text段用于存放代码,通常情况下在内存中被映射为只读,但d ...
- 数据段、代码段、堆栈段、BSS段
在linux中,进程在内存中一般会分为5个段,用来存放从磁盘载入的程序代码,等. 这五个段分别是: BSS段: 通常用来存放程序中未初始化的全局变量的一块内存区域.属于静态内存分配. 问题:全局变量不 ...
- c语言堆、栈、数据段、代码段、bss段的疑惑
程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(h ...
- C++ 堆区,栈区,数据段,bss段,代码区(详解)
各段的介绍 一般情况下,一个可执行C程序在内存中主要包含5个区域,分别是代码段(text),数据段(data),BSS段,堆段(heap)和栈段(stack).其中前三个段(text,data,bss ...
- 数据段、代码段、BSS段、堆栈段
进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用 途 不一而不尽相同,有些内存是事先静态分配和统一回收的 ...
- keil内存溢出表现_详细讲解C语言五大内存分区与可执行程序的三段(Text段、Date段、Bss段)【建议收藏】...
一.c语言五大内存分区 栈区(stack):存放函数形参和局部变量(auto类型),由编译器自动分配和释放. 堆区(heap):该区由程序员申请后使用,需要手动释放否则会造成内存泄漏.如果程序员没有手 ...
- 关于text段、data段和bss段
根据APUE,程序分为下面的段:.text, data (initialized), bss, stack, heap. data/bss/text: text段在内存中被映射为只读,但.data和. ...
- C/C++程序内存布局(data段,bss段,text段)以及static关键字详解
目录 1.内存布局 1.1 data段(可读可写) 1.2 text段(只读) 1.3 bss段(可读可写) 1.4 堆区 1.5 栈区 1.6全局区/静态区 1.7 字符串常量区 1.8 代码区 1 ...
最新文章
- springboot项目中session和cookie
- 【Scratch】青少年蓝桥杯_每日一题_6.09_密码
- python html转换为普通文本_将HTML表转换为可读的纯文本的Python解决方案
- 2021年山西副高考试成绩查询,中国卫生人才网2021年山西卫生资格考试成绩查询...
- 如何使用jQuery将事件附加到动态HTML元素? [重复]
- 崩了导致代码都乱了_抖音崩了?别慌,你的快乐还在
- 烧写器--SPI NAND FLASH烧录定制说明
- python 温度 符号_python中如何将华氏温度转换为摄氏温度?
- EXCEL与数据分析
- 区块链-WeBase企业部署
- 谷歌发布深度学习Efficient Net新架构,各方面表现全面碾压卷积神经网络
- Linux:DNS服务
- springboot学习中的错误
- 计算输入的正数和负数个数
- Origin 在已画图中添加新的数据曲线
- ubuntu qt使用搜狗输入法
- 运行gitbook init命令报错及问题解决办法 TypeError [ERR_INVALID_ARG_TYPE]: The “data“ argument must be of type stri
- 工厂IP网络广播系统解决方案
- 浅谈社交电商产品设计的10个深刻的知识
- 支路电流法和节点电压法 典例(感觉收获真不错)