В каком сегменте (.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 несколько раз, инструкции printf увеличиваются независимо. Имеет смысл, поскольку переменные foo и bar являются локальными для единицы перевода.
Но где выделено хранилище?
Чтобы быть ясным, предполагается, что у вас есть инструментальная цепочка, которая выводит файл в формате ELF. Таким образом, я считаю, что имеет, чтобы быть зарезервированным в исполняемом файле для этих статических переменных. В целях обсуждения предположим, что мы используем инструментальную цепочку GCC.