16
C和C ++中的静态变量存储在哪里?
静态变量存储在可执行文件的哪个段(.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的主文件,则printf语句将独立增加。这是有道理的,因为foo和bar变量是转换单元的本地变量。 但是在哪里分配存储空间? 明确地说,假设您拥有一个可以以ELF格式输出文件的工具链。因此,我相信,有有将一些空间,对于那些静态变量的可执行文件保留。 出于讨论目的,假设我们使用GCC工具链。