gpt4 book ai didi

c - 关于Unix中的bss段和data段

转载 作者:太空狗 更新时间:2023-10-29 14:54:33 31 4
gpt4 key购买 nike

我在我的 unix 教科书上读到 bss 用于存储未初始化的变量(全局声明)。这意味着静态变量是单独存储的,而不是在 bss 中。唯一的其他地方是数据段。

这是我的问题:bss 段是数据段的一部分还是它们是两个完全不同的内存段集?另外,为什么要将全局变量与静态变量分开?

最佳答案

最初的想法仍然存在,尽管在它之上有针对本地符号、小引用、共享库等的混淆层。

但是一切还是基于原来的简单模型,所以值得了解。这个想法是分为三个部分。

  • .text
    这有程序代码。
  • .data
    这有初始化数据。
  • .bss
    这有未初始化的数据。

Bss 的特殊之处在于:.bss 对象在目标文件中不占用任何空间,通过将所有未专门初始化的符号组合在一起,可以轻松地将它们一次清零。

静态有几个含义。从某种意义上说,它只是一个符号属性,告诉链接器它是局部于目标模块还是可以与其他同名符号全局链接。它还用于指定存储持续时间,以将函数内的对象与自动(堆栈分配)对象区分开来。

所以静态变量可以在 data 或 bss 中,这取决于它是否被初始化,全局变量也是如此。

关于c - 关于Unix中的bss段和data段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1909953/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com