Пусть это стек вызовов моей программы в определенной точке:Как обычно решаются переменные с одинаковым именем?
| b = 2 |
| c = 3 | <- function f2
| return address |
| function args |
| ... |
| c = 10 | <- function f1
| ... |
f1()
f2()
звонки.
При указании переменной c
, как это разрешено? Является ли стек поиска линейно сверху вниз, чтобы найти первую переменную с именем c
в области видимости или есть какой-то другой механизм, который позаботится об этом более эффективно?
Если поиск стека выполняется каждый раз, если на него не указана несуществующая переменная d
, так как будет проверен стек, чтобы узнать, что в этой области нет такой переменной?
Стек не «обыскан», компилятор знает, сколько переменных существует, поэтому функция заканчивается тем, что 5-я локальная переменная находится на расстоянии 48 байт от указателя стека. – Kos
«Переосмысление этого» приходит на ум. Не путайте * язык * с * реализацией *. Язык точно определяет, как ведет себя ваш код, и он это сделает. –
Когда ваш код скомпилирован, любое использование имени переменной заменяется адресом относительно текущего указателя кадра стека. Поиск не требуется. –