原因是减少程序大小。假设你的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可能是一个非常高效的内联汇编器,这意味着启动拷贝可以更快地执行。