Как система идентифицирует статические переменные с одинаковыми именами в разных функциях? - PullRequest
3 голосов
/ 03 мая 2010

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

Ответы [ 3 ]

3 голосов
/ 03 мая 2010

Компиляторы не хранят имена статических переменных в таблице символов ссылок. Это всего лишь некоторая память, которая является частью модуля для линкера. (это может быть не на 100% верно во всех случаях, но фактически верно)

Имена статических переменных обычно включаются в таблицу символов отладки.

Когда вы передаете .c-файл компилятору, он отслеживает имена всех известных символов, чтобы он мог распознать их такими, какие они есть, когда они появятся в будущем коде. Он также запоминает их, так что может выдавать полезные сообщения об ошибках / предупреждениях, но в значительной степени забывает о них при генерации выходных файлов (если не генерируются символы отладки).

1 голос
/ 03 мая 2010

Это зависит от компилятора, но некоторые встроенные просто добавляют число в конце каждого дублированного имени. Таким образом, каждая переменная имеет уникальное имя.

1 голос
/ 03 мая 2010

Они, скорее всего, искажены в таблице, аналогично тому, как реализованы перегруженные функции.

См. dumpbin /symbols foo.obj, если хотите заглянуть за стол, или используйте objdump в linux.

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