c++ - C 和 C++ 中静态变量存储在哪里?

标签 c++ c compiler-construction

静态变量存储在可执行文件的哪个段(.BSS、.DATA、其他)中,以便它们不会发生名称冲突? 例如:


foo.c:                         bar.c:
static int foo = 1;            static int foo = 10;
void fooTest() {               void barTest() {
  static int bar = 2;            static int bar = 20;
  foo++;                         foo++;
  bar++;                         bar++;
  printf("%d,%d", foo, bar);     printf("%d, %d", foo, bar);
}                              }

如果我编译这两个文件并将其链接到重复调用 fooTest() 和 barTest 的 main,则 printf 语句独立递增。这是有道理的,因为 foo 和 bar 变量是翻译单元的本地变量。

但是存储空间分配在哪里呢?

需要明确的是,假设您有一个可以输出 ELF 格式文件的工具链。因此,我相信在可执行文件中必须为这些静态变量保留一些空间。
出于讨论目的,我们假设我们使用 GCC 工具链。

最佳答案

静态数据的去向取决于它们是否零初始化零初始化静态数据进入 .BSS (Block Started by Symbol)非零初始化数据进入 .DATA

关于c++ - C 和 C++ 中静态变量存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25344308/

相关文章:

c++ - Media Foundation 中的属性窗口

c++ - 如果 arrayposition 是一个整数...?

c++ - 如何在 C/C++ 中获取多维数组的列?

3幅图像之间的比较

ios - xcode 4.1 黄色三角形?

c++ - 如何通过组合红色和蓝色无符号字节来优化混合?

c++ - 为什么这种类型的删除实现(简化提升 :any) gives segmentation fault?

c - 将结构成员指针分配给另一个动态内存分配指针是否安全?

c++ - 如何使用 gcc 模仿 Microsoft 版本的 __FUNCTION__?

c - GCC 和 Clang 解析器真的是手写的吗?