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

Ответы на вопрос(15)

Ваш ответ на вопрос