有两个部分的好处 - .data和.bss用于流程范围变量。为什么不只有一个?我知道每个部分用于什么。我正在使用gcc。
答案 0 :(得分:7)
.bss消耗“内存”但不占用可执行文件中的空间。它的唯一目的是保存零初始化数据(如您所知)。
.data(以及诸如rodata之类的相关部分)实际上消耗了可执行文件中的空间,并且通常包含字符串,整数甚至整个对象。
在典型的程序中有很多零初始化数据,因此让数据不会消耗输出文件中的额外空间是一个重要的好处。
对于多个。*数据部分... .rodata / .data可以用作内存保护的提示(不允许覆盖.rodata,允许读/写.data)。