#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
. Итак, вы можете видеть, поскольку это присутствует в обычных переменных, то же самое относится и к статическим переменным.
Ваш вопрос меня немного смущает, но я думаю, что я ответил на него. Если вы спрашиваете, где находится адрес памяти, это невозможно предсказать.