在 C 和 C 中,静态变量分配在可执行文件的特定段中,以避免不同翻译单元之间的命名冲突。当编译多个源文件时,例如提供的代码中的 foo.c 和 bar.c 文件,每个翻译单元都会创建自己的静态变量副本。
静态变量的存储位置取决于是否它们被初始化为零或不初始化。零初始化的静态数据放置在 .BSS 段中,而非零初始化的静态数据放置在 .DATA 段中。
在给定的示例中, foo 和 bar 都初始化为非零值。因此,它们将被分配在.DATA段中。编译器在 .DATA 段中为这些变量保留空间,它们的值存储在那里。
链接可执行文件时,.DATA 和 .BSS 段的内容被复制到相应的段中。 ELF 文件。 .DATA 段通常合并到 .text(代码)段中,而 .BSS 段在运行时分配在程序内存的 BSS 区域中。
在 GCC 工具链中,静态文件的位置可以使用 -Xlinker -d' 选项检查变量,该选项显示 ELF 部分及其内容。通过检查 .data 和 .bss` 部分,您可以验证静态变量的分配并确保它们不会相互冲突。
以上是C 和 C 中静态变量分配在哪里?的详细内容。更多信息请关注PHP中文网其他相关文章!