拥有.bss部分有什么好处?

Bru*_*uce 6 c

有2个部分的好处是什么 - .data和.bss用于进程范围变量.为什么不只有一个?我知道每个部分用于什么.我正在使用gcc.

Mat*_*lin 7

.bss消耗"内存"但不占用可执行文件中的空间.它的唯一目的是保存零初始化数据(如您所知).

.data(以及诸如rodata之类的相关部分)实际上消耗了可执行文件中的空间,并且通常包含字符串,整数甚至整个对象.

在典型的程序中有很多零初始化数据,因此让数据不会消耗输出文件中的额外空间是一个重要的好处.

至于多个.*数据部分...... .rodata/.data可以用作内存保护的提示(不允许覆盖.rodata,允许读/写.data).

  • @Bruce:在运行时,.data和.bss之间基本没有区别.区别在于链接器输出(磁盘上存在一个部分,另一部分不存在),以及可执行加载程序如何加载该部分..data是一个副本 - 加载器可能使用memcpy ... .bss归零 - 加载器可能使用memset. (3认同)