关于bss段的理解

bss段是不会出现在程序下载文件(*.bin *.hex)中的,因为全都是0。如果把它们出现在程序下载文件中,会增加程序下载文件的大小。实际应用中,通常只需要把bss段的起始地址和结束地址(或大小)保存起来,而不需要将程序下载文件中出现bss段(一堆0)将来真正运行程序的时候,再根据这两个数据进行bss段的初始化就行了。

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

bss段的大小,记录在段表里里,记录的是所有未初始化变量总共的大小,bss段只在段表里有个记录,但实现并不存在这个段.

static int g;
static short int h;
int main(){}

用readelf -S 或 objdump -h 查看段表:

每个未初始化的变量的大小放在了符号表里。
你看下面符号表中的4 ,2分别就是g,h的大小。
用readelf -s 或 objdump -t 查看符号表:


 

猜你喜欢

转载自blog.csdn.net/z1026544682/article/details/85240448