在C编程中,当程序被执行时,程序中使用的所有数据将被放置在不同的段中。我知道未初始化的全局和静态变量存储在.bss段中。而所有已初始化的全局和静态变量存储在数据段中。如果数据段已经存在,那么使用.bss的目的是什么呢?
因此,这是一种快速简便的方式,可以将一组变量初始化为零,而不是在程序显式地将它们设置为零,以节省程序镜像中的空间。通常,目标文件中仅存储 bss 段的长度,而不存储数据。程序加载器在加载程序时为 bss 段分配并初始化内存。操作系统可能使用一种称为按需零填充的技术来高效地实现 bss 段(McKusick&Karels 1986)。在嵌入式软件中,bss 段被映射到初始化为零的内存中,由 C 运行时系统在进入 main() 函数之前进行初始化。