关于Unix中的bss段和数据段

tom*_*h13 5 c unix memory

我在我的unix教科书中读到bss用于存储未初始化的变量(全局声明).这意味着静态变量是单独存储的,而不是存储在bss中.唯一的另一个地方是数据段.

这是我的问题:bss段是数据段的一部分还是两个完全不同的内存段?另外,为什么要将全局变量与静态变量分开?

Dig*_*oss 11

最初的想法仍然存在,尽管在它上面有一些混淆层用于本地符号,小引用,共享库等.

但一切仍然基于原始的简单模型,因此值得了解.这个想法是有三个部分.

  • .text
    这有程序代码.
  • .data
    这已经初始化了数据.
  • .bss
    这有未初始化的数据.

Bss是特殊的:.bss对象不占用目标文件中的任何空间,并且通过将未特别初始化的所有符号分组在一起,可以很容易地将它们一次归零.

静态有几个含义.在某种意义上,它只是一个符号属性,它告诉链接器它是对象模块的本地还是可以与其他同名符号进行全局链接.它还用于指定存储持续时间,以区分函数内的对象与自动(堆栈分配)对象.

因此,静态变量可以是数据或bss,具体取决于它是否已初始化,也可以是全局变量.