Как статические локальные переменные дифференцируются компилятором или процессором во время выполнения?

#c #scope #static #sections

#c #область видимости #статические #разделы

Вопрос:

Я слышал, что статические и глобальные переменные хранятся в одном разделе. И если это не так, как глобальные переменные, статические локальные переменные не будут удалены из памяти до выгрузки кода или завершения программы.

Рассмотрим следующий код:

 void f1() {
static int i;
...
...
}

void f2() {
static int i;
...
...
}
  

если оба i находятся в одном разделе, как процессор будет различать их?
И как процессор загружает соответствующие статические локальные переменные при вызове функции?

Этот вопрос можно распространить на многофайловые глобальные статические переменные.

Комментарии:

1. Процессор не знает имени, он знает адрес. Два адреса уникальны.

2. Во время трансляции компилятор отслеживает всю информацию о переменных — их область видимости, их класс хранения и т.д. — и когда он генерирует машинный код, он создает уникальные местоположения для каждого экземпляра . i

Ответ №1:

Каждая переменная должна иметь свое собственное уникальное местоположение и ОБЛАСТЬ ВИДИМОСТИ! Область действия важна, и каждая переменная имеет связанную с ней область действия. Это то, что отделяет int i in f1 от int i in f2 . Итак, вы можете видеть, поскольку это присутствует в обычных переменных, то же самое относится и к статическим переменным.

Ваш вопрос меня немного смущает, но я думаю, что я ответил на него. Если вы спрашиваете, где находится адрес памяти, это невозможно предсказать.