静态变量存储在可执行文件的哪个段(.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 格式文件的工具链。于是,我believe那里has在可执行文件中为这些静态变量保留一些空间。
出于讨论目的,我们假设我们使用 GCC 工具链。
您的静力学去向取决于它们是否零初始化. 零初始化静态数据进入.BSS(以符号开头的块), 非零初始化数据进入.DATA
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)