首页 >后端开发 >C++ >C 和 C 可执行文件中静态变量存储在哪里?

C 和 C 可执行文件中静态变量存储在哪里?

Barbara Streisand
Barbara Streisand原创
2024-12-30 12:07:12211浏览

Where Are Static Variables Stored in C and C   Executables?

深入研究 C 和 C 中静态变量的存储

静态变量在 C 和 C 编程中发挥着至关重要的作用,使数据能够在整个生命周期中持续存在。程序。但是这些变量到底存储在可执行文件中的哪里以确保不会发生名称冲突?

考虑以下代码片段:

// foo.c
static int foo = 1;
void fooTest() {
  static int bar = 2;
  foo++;
  bar++;
}

// bar.c
static int foo = 10;
void barTest() {
  static int bar = 20;
  foo++;
  bar++;
}

当使用 main 函数编译和链接这些文件时,重复调用 fooTest() 和 barTest(),printf 语句独立递增。这表明 foo 和 bar 变量对于它们各自的翻译单元来说是本地的。

静态变量的存储分配

可执行文件中静态变量的分配取决于它们的初始化。

  • 零初始化:初始化为零的静态数据放置在.BSS(由符号开始的块)段。该段在程序执行期间用零填充。
  • 非零初始化:使用非零值初始化的静态数据放置在.DATA段中。该段包含初始化数据,在程序启动时加载到内存中。

工具链依赖

静态变量的具体存储位置可能会根据所使用的工具链而有所不同。对于此讨论,我们假设我们使用的是 GNU 编译器集合 (GCC)。

结论

C 和 C 中的静态变量存储在可执行文件的 .BSS 或 .DATA 段中文件,具体取决于它们的初始化。这确保每个静态变量都有唯一的内存位置并防止名称冲突。

以上是C 和 C 可执行文件中静态变量存储在哪里?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn