拥有.bss节的优势是什么?

6
拥有2个节段——.data和.bss对于进程范围的变量有什么好处?为什么不只有一个节段?我知道每个节段的用途。我正在使用gcc。
1个回答

7
.bss仅用于保存零初始化的数据,不会在可执行文件中占用空间,但会占用内存。 .data(以及与之相关的节,例如.rodata)实际上会占用可执行文件中的空间,并通常保存字符串、整数甚至整个对象。
典型程序中有很多零初始化数据,因此不会使其在输出文件中占用额外空间是一个重要的优点。
至于多个*data节... .rodata/.data可用作内存保护的提示(禁止覆盖.rodata,允许读/写.data)。

请问你能给一些例子吗?比如内存视图、汇编指令等。 - Bruce
3
在运行时,.data 和 .bss 基本上没有区别。它们的差异在于链接器输出(一个存在于磁盘上,另一个不存在),以及可执行加载程序加载节的方式。.data 是一份拷贝 - 加载程序可能使用 memcpy... 而 .bss 则被清零 - 加载程序可能使用 memset。 - Matthew Iselin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接