powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / адрес переменной
19 сообщений из 19, страница 1 из 1
адрес переменной
    #35513265
Где хранится адрес области памяти, ассоциированной с переменной?

Еесть, к примеру, простейшее объявление переменной: int c;
Под эту переменную в 32-разрядной архитектуре компилятор выделяет 4 байта памяти.
А каким образом он в дальнейшем находит эту область памяти?
Скорее всего где-то хранит адрес первого байта (наподобии указателей), ассоциированный с именем переменной. Или как-то по-другому?

ЗЫ Только сильно не пинайте
...
Рейтинг: 0 / 0
адрес переменной
    #35513334
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий cppГде хранится адрес области памяти, ассоциированной с переменной?

Еесть, к примеру, простейшее объявление переменной: int c;
Под эту переменную в 32-разрядной архитектуре компилятор выделяет 4 байта памяти.
А каким образом он в дальнейшем находит эту область памяти?
Скорее всего где-то хранит адрес первого байта (наподобии указателей), ассоциированный с именем переменной. Или как-то по-другому?

ЗЫ Только сильно не пинайте
Слишком общий вопрос.
Для локальной переменной функции, например, - память выделяется в стеке.
...
Рейтинг: 0 / 0
адрес переменной
    #35513335
на пальцах.

Компилятор читает программу

Код: plaintext
1.
2.
int i;
i= 2 ;
i++;

и обрабатывает её по шагам (компилирует):
так, объявили переменную i, пусть её адрес в екзешнике будет 8, записал в книжечку
так, пишут в переменную i число 2, значит пишу в екзешник команду "записать число 2 по адресу 8"
так, увеличивают значение переменной i, пишу в екзешник команду "увеличить число по адресу 8"

т.е. два ответа:
1. во время компиляции хранится в служебных таблицах компилятора.
2. во время выполнения скомпилированной программы везде вместо переменной уже адрес.

Хотя на практике всё может быть сложнее...
...
Рейтинг: 0 / 0
адрес переменной
    #35513343
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
календареведпусть её адрес в екзешнике будет 8
По-моему, автора интересует как раз вопрос "что это за 8 и где оно находится".
...
Рейтинг: 0 / 0
адрес переменной
    #35513405
Dihotom календареведпусть её адрес в екзешнике будет 8
По-моему, автора интересует как раз вопрос "что это за 8 и где оно находится".
Угу...
т.е., я так понимаю, куда-то записывается имя переменной i (ее ascii-код) и этому коду ставится в соответствие адрес области памяти. Может быть это все находится где-то в статической памяти...или стековой?
...
Рейтинг: 0 / 0
адрес переменной
    #35513457
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий cppУгу...
т.е., я так понимаю, куда-то записывается имя переменной i (ее ascii-код) и этому коду ставится в соответствие адрес области памяти. Может быть это все находится где-то в статической памяти...или стековой?
Что такое ASCII-код переменной я не знаю.
Допустим, у Вас есть код:
Код: plaintext
1.
2.
3.
4.
5.
void f()
{
    int i;
    int J;
    i =  2 ;
}
В этом случае происходит примерно следующее:
1. Запоминается текущее значение указателя стека (регистр ESP), например, в регистре EBX.
2. Выделяется память в стеке для i, для чего указатель стека (ESP) смещается на 4 байта "вниз". При это переменной i ставится в соответствие смещение относительно исходного состояния стека - 4 байта.
3. Выделяется память в стеке для j, для чего указатель стека (ESP) смещается на 4 байта "вниз". При это переменной j ставится в соответствие смещение относительно исходного состояния стека - 8 байт.
4. По адресу переменной i, получаемому как исходное состояние стека (EBX) минус её смещение (4) записывается значение 2.
5. Восстанавливается исходное состояние стека: значение ESP устанавливается равным EBX.

Описан самый простой случай.
Знатоки asm меня поправят, если что.
...
Рейтинг: 0 / 0
адрес переменной
    #35513467
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправлюсь:
Вместо EBX, по-моему, используется EBP.
И что более важно - смещение переменной i относительно исходного состояния указателя стека будет 0, а смещение переменной j - 4. Хотя реально тут смещения другие будут - зависит и от наличия параметров функции, и от компилятора, и от способа вызова, короче, от множества факторов. Но, для объяснения - вполне подойдет 0 и 4.
...
Рейтинг: 0 / 0
адрес переменной
    #35513532
>Что такое ASCII-код переменной я не знаю.
Имелось в виду ascii-код имени переменной, т.е., к примеру, для i - это 105.

>переменной i ставится в соответствие...
а где это осуществляется?
...
Рейтинг: 0 / 0
адрес переменной
    #35513540
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий cppИмелось в виду ascii-код имени переменной, т.е., к примеру, для i - это 105.
Нет, ничего такого не делается.

Изучающий cppа где это осуществляется?
Это делает компилятор. Если Вы посмотрите дизассемблированный код, то увидете, что все обращения к i закодированы как "EBP - 4" (это если бы смещение было, например, 4). Т.е. EBP - 4 - это адрес, а [EBP - 4] - это значение по этому адресу.
...
Рейтинг: 0 / 0
адрес переменной
    #35513552
DihotomЭто делает компилятор. Если Вы посмотрите дизассемблированный код, то увидете, что все обращения к i закодированы как "EBP - 4" (это если бы смещение было, например, 4). Т.е. EBP - 4 - это адрес, а [EBP - 4] - это значение по этому адресу.
Ага, понял! А если это, к примеру:
Код: plaintext
static int i;
т.е. переменная находится в статической памяти?

ЗЫ Сори за назойливость
...
Рейтинг: 0 / 0
адрес переменной
    #35513565
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий срр
Ага, понял! А если это, к примеру:
Код: plaintext
static int i;
т.е. переменная находится в статической памяти?

ЗЫ Сори за назойливость
Честно говоря, не знаю, как эта память правильно называется :)
По смыслу - да. Это некая постоянная область памяти, в которой при загрузке программы сразу же выделяется память в 4 байта. Любое дальнейшее обращение к переменной i компилятор интерпретирует как непосредственное обращение к этому адресу (или значению по этому адресу).
...
Рейтинг: 0 / 0
адрес переменной
    #35513569
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если не секрет, зачем Вам это? Просто из любопытства или какие-то конкретные практические цели?
...
Рейтинг: 0 / 0
адрес переменной
    #35513582
Спасибо, Dihotom!

Теперь более или менее ясно! Можно идти пить пиво по поводу пятницы
...
Рейтинг: 0 / 0
адрес переменной
    #35513595
DihotomА если не секрет, зачем Вам это? Просто из любопытства или какие-то конкретные практические цели?
Изучаю с++, хочется понимать что я делаю не только на уровне Button1Click :) , но и чуть глубже. Предстоит писать довольно сложные клиентские части, если сейчас не задаваться этими вопросами, то со временем пропадет понимания чего я творю...имхо. Еще раз спасибо за помощь!
...
Рейтинг: 0 / 0
адрес переменной
    #35513926
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий cpp wrote:
> Где хранится адрес области памяти, ассоциированной с переменной?
Нигде. Переменная - это и есть адрес.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
адрес переменной
    #35513934
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий cpp wrote:

> >переменной i ставится в соответствие...
> а где это осуществляется?
В таблицах компилятора, хранящихся только во время компиляции.
Затем в объектный файл записывается (иногда, не всегда)
в виде тоже неких таблиц в объектном файле.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
адрес переменной
    #35513961
Николай1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий cpp DihotomА если не секрет, зачем Вам это? Просто из любопытства или какие-то конкретные практические цели?
Изучаю с++, хочется понимать что я делаю не только на уровне Button1Click :) , но и чуть глубже. Предстоит писать довольно сложные клиентские части, если сейчас не задаваться этими вопросами, то со временем пропадет понимания чего я творю...имхо. Еще раз спасибо за помощь!

Сложные клиентские части?
С такой базой??????
Мама, роди меня обратно....
...
Рейтинг: 0 / 0
адрес переменной
    #35514024
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий cpp wrote:
> Где хранится адрес области памяти, ассоциированной с переменной?
Да, кстати. С переменной может и не быть вообще ассоциированной
памяти.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
адрес переменной
    #35514081
MasterZiv
Изучающий cpp wrote:
> Где хранится адрес области памяти, ассоциированной с переменной?
Нигде. Переменная - это и есть адрес.
Posted via ActualForum NNTP Server 1.4
Спасибо, MasterZiv!
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / адрес переменной
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]