在哪个段(。BSS, .DATA,其他)的可执行文件的静态变量存储,以便他们没有名称冲突? 例如:< / p >
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的主程序,printf语句将独立递增。这是有意义的,因为foo和bar变量是翻译单元的局部变量。
但是存储分配在哪里呢?
需要明确的是,假设您有一个以ELF格式输出文件的工具链。因此,我相信使有在可执行文件中为那些静态变量保留一些空间 为了便于讨论,让我们假设我们使用GCC工具链