Где хранятся статические переменные в 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.