静态变量存储在可执行文件的哪个段(.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工具链.