为什么需要.bss段?

为什么需要.bss段?

原因是减少程序大小。假设你的C程序运行在嵌入式系统上,代码和所有常量都保存在真正的ROM(闪存)中。在这样的系统中,在调用main()之前,必须执行初始“复制”以设置所有静态存储持续时间对象。它通常会像这样伪造:

for(i=0; i

{

.data[i] = init_value[i];

}

memset(.bss,

0,

all_implicitly_initialized_objects);

其中.data和.bss存储在RAM中,但init_value存储在ROM中。如果它是一个段,那么ROM必须填充很多零,从而显着增加ROM的大小。

基于RAM的可执行文件的工作方式类似,但它们当然没有真正的ROM。

另外,memset可能是一个非常高效的内联汇编器,这意味着启动拷贝可以更快地执行。

相关推荐