静态变量存储在可执行文件的哪个段(.BSS、.DATA、other)中,以避免名称冲突?


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格式的文件.因此,Ibelieve认为在可执行文件中应该为这些静电变量保留一些空间.
出于讨论目的,假设我们使用GCC工具链.

推荐答案

静力学的go 向取决于它们是否为zero-initialized.zero-initialized个静态数据放入.BSS (Block Started by Symbol)个,non-zero-initialized个数据放入.DATA

C++相关问答推荐

XV 6中的MLFQ和RR

如何在Scilab API中求解方程

在x86汇编中,为什么当分子来自RDRAND时DIV会引发异常?

有什么方法可以检测SunOS上的SparcWorks吗?

%p与char* 等组合缺少的GCC Wform警告

为什么getchar()挂起了,尽管poll()返回了一个好的值?""

POSIX文件描述符位置

自定义应用程序上的日志(log)轮换问题

创建一个fork导致fget无限地重新读取文件

变量>;-1如何在C中准确求值?

在C++中使用函数指针的正确语法

C-使用指针返回修改后的整数数组

关于scanf()和空格的问题

通过k&;r语法的c声明无效

Zlib:解压缩大文件导致";无效代码长度设置";错误

从CentOS 7到Raspberry PI 2B的交叉编译-无法让LIBC和System Include标头一起工作

宏观;S C调深度

可以';t从A9G模块拨打电话

`%%的sscanf无法按预期工作

获取 struct 中匿名 struct 的大小