首页 » 信息技术 »

.bss段不占磁盘空间

2020年6月24日 / 5次阅读
CC++

ELF文件的.bss段存放未初始化的全局变量和局部静态变量的总大小。所谓未初始化,就是值为0,如果代码显示的初始化为0,也有可能被编译器优化成未初始化的状态。

.bss段只存放一个总的大小,这个大小的空间在程序被OS加载的时候初始化为0,然后分配给变量,符号表中存放了这些变量的具体信息。

这样做的目的是为了减少目标文件的大小,减少磁盘占用,也加快程序加载速度。试想一个几百兆的数组,如果代码初始化不为0,光这个数组占用的文件大小就有几百兆。因此,如果逻辑上允许,就不要对这样大的数据结构进行初始化,在程序加载的时候在分配空间,统一初始化为0。

.bss不占据实际的磁盘空间,只在段表中记录大小,在符号表中记录符号。当文件加载运行时,才分配空间以及初始化。

根据C语法的规定,局部变量不设置初始值的时候,其初始值是不确定的,局部变量(不含静态局部变量)的存储位置位于栈上,具体位置不固定。

size命令看到的bss段大小,其实是bss段的值。

本文链接:https://www.maixj.net/ict/bss-23766

相关文章

留言区

《.bss段不占磁盘空间》有1条留言

  • 麦新杰

    .o文件的.bss段为0,link后.bss才有数字。 []


前一篇:
后一篇:
-->只要几分钟回答问卷,就能轻松赚现金!

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top