.bss的目的是什么?

3
在C编程中,当程序被执行时,程序中使用的所有数据将被放置在不同的段中。我知道未初始化的全局和静态变量存储在.bss段中。而所有已初始化的全局和静态变量存储在数据段中。如果数据段已经存在,那么使用.bss的目的是什么呢?
2个回答

3
引用 维基百科 的一段话:

通常,目标文件中仅存储 bss 段的长度,而不存储数据。程序加载器在加载程序时为 bss 段分配并初始化内存。操作系统可能使用一种称为按需零填充的技术来高效地实现 bss 段(McKusick&Karels 1986)。在嵌入式软件中,bss 段被映射到初始化为零的内存中,由 C 运行时系统在进入 main() 函数之前进行初始化。

因此,这是一种快速简便的方式,可以将一组变量初始化为零,而不是在程序显式地将它们设置为零,以节省程序镜像中的空间。

0
在C运行时初始化过程中,.bss和.data通常被处理得不同。
在一些系统上,.data部分是从压缩的数据集中初始化的,而.bss则简单地设置为零。
因此,换句话说,处理未初始化数据和已初始化数据可能是有用的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接