BSS是英文Block Started by Symbol
本质是一个Block(块),是一个Symbol block,存了很多symbol。
我们知道程序有数据段和代码段,数据段里面数据存储最出名的就是.data和.bss这两个。这连个什么呢?他们不是Segment段,而是Section节。多个节组成代码段。
- .data 节:存储初始化的某些变量,包括全局变量初始化变量和静态初始化变量
- .bss 节:存储未初始化的某些变量,包括全局未初始化变量和静态未初始化变量)
看起来这两个都是存储全局变量和静态初始化变量的,为什么还需要两个段(节)?
主要是为了节省存储空间。
- .data中需要分配空间。除了在elf中占用一个symbol,还需要占用实际空间。
- .bss中不需要分配空间,只需要一个符号(symbol)

所以一种理解的就来了,为什么叫Block Started by Symbol?
实际的全称是:Segment which Block Started by Symbol
Block,块,为什么不是叫Segment Started by Symbol,它本来就是Segment,为何要一个Block来加强表达?实际不是说他是一个block。这个全称主语是Segment 而不是Block,所以Block在这里应该不是主语,也就是不是名词。

Started,不是开始的意思,是启动的意思
by通过
Symbol,符号
所以可以理解为 把这些未初始化的,一次性像块操作一样通过符号启动。在

文章解释了BSS段(BlockStartedbySymbol)在C语言中的作用,它是用于存储未初始化变量以节省内存的Section节。BSS通过符号一次性在运行时初始化为0,不同于.data段,BSS无需分配实际空间。
最低0.47元/天 解锁文章
1147

被折叠的 条评论
为什么被折叠?



