статический адрес локальной переменной в C - PullRequest
0 голосов
/ 18 февраля 2019

Я знаю, что статическая локальная переменная существует на протяжении всей жизни программы.Но поддерживает ли статическая локальная переменная тот же адрес памяти?

Или компилятор просто гарантирует, что он существует и доступен в локальной области?

Ответы [ 3 ]

0 голосов
/ 18 февраля 2019

В C объекты не перемещаются в течение своей жизни.Пока объект существует, он будет иметь один и тот же адрес.

Переменные со статическим хранилищем (включая переменные с областью действия блока, объявленной как static) имеют время жизни, охватывающее все выполнение программы, поэтомуу них есть постоянный адрес.

0 голосов
/ 18 февраля 2019

Существует очень небольшая разница между локальными static с и обычными глобальными переменными.

int x = 42; //static lifetime, external name
static int y = 43; //static lifetime, no external name, 
                   //referencable in all scopes here on out
                   //(unless overshadowed)
int main()
{
   static int z = 44; //like y, but only referencable from within this scope
                      //and its nested scopes
   {
       printf("%p\n", (void*)&z));
   }
}

Все они имеют фиксированные адреса после того, как программа была связана и загружена.

Локальная статикакак глобальные, за исключением того, что на них можно ссылаться только (по их имени) изнутри их области видимости и вложенных субскопов.(Вы можете ссылаться на них из несвязанных областей с помощью указателей.)

0 голосов
/ 18 февраля 2019

Да, смещение адреса каждой статической переменной известно во время компиляции.Когда двоичный файл загружается в память, локальные переменные сохраняются в сегменте .data адресного пространства программы.

Другими словами, адрес статической переменной не изменитсяво время выполнения кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...