gpt4 book ai didi

c - .bss 部分没有零初始化怎么样

转载 作者:太空狗 更新时间:2023-10-29 15:11:23 26 4
gpt4 key购买 nike

正如我们所知,.bss 包含未初始化的变量。如果在 C 代码中,程序员在使用它们之前初始化变量。那么在执行 C 代码之前.bss 不必为零。

我说得对吗?

谢谢

最佳答案

在 C 代码中,任何具有静态存储持续时间的变量都被规范定义为初始化为 0(第 6.7.8 节初始化,第 10 段):

If an object that has static storage duration is not initialized explicitly, then:

  • if it has pointer type, it is initialized to a null pointer;
  • if it has arithmetic type, it is initialized to (positive or unsigned) zero;
  • if it is an aggregate, every member is initialized (recursively) according to these rules;
  • if it is a union, the first named member is initialized (recursively) according to these rules.

一些程序加载器会在开始时用零填充整个部分,而另一些程序加载器会“按需”填充它以提高性能。因此,虽然您在技术上是正确的,.bss 部分在 C 代码开始执行时可能真的包含全零,但逻辑上确实如此。无论如何,假设您有一个符合标准的工具链,您可以将其视为全零。

任何初始化为非零值的变量永远不会在 .bss 部分结束;它们在 .data.rodata 部分中处理,具体取决于它们的特定特征。

关于c - .bss 部分没有零初始化怎么样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3532334/

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