Что такое таблица символов?

Может кто-нибудь описать, что такое таблица символов в контексте C и C++?

7 ответов

Решение

Здесь есть два общих и связанных значения символов таблиц.

Во-первых, в ваших объектных файлах есть таблица символов. Обычно компилятор C или C++ компилирует один исходный файл в объектный файл с расширением.obj или.o. Он содержит коллекцию исполняемого кода и данных, которые компоновщик может обработать в работающее приложение или общую библиотеку. В объектном файле есть структура данных, называемая таблицей символов, которая отображает различные элементы в объектном файле на имена, понятные компоновщику. Если вы вызываете функцию из своего кода, компилятор не помещает окончательный адрес подпрограммы в объектный файл. Вместо этого он помещает в код значение заполнителя и добавляет примечание, в котором указывается, что компоновщик должен искать ссылку в различных таблицах символов во всех объектных файлах, которые он обрабатывает, и указывать там окончательное местоположение.

Во-вторых, есть также таблица символов в общей библиотеке или DLL. Он создается компоновщиком и служит для именования всех функций и элементов данных, которые видны пользователям библиотеки. Это позволяет системе выполнять связывание во время выполнения, разрешая открытые ссылки на эти имена в место, где библиотека загружена в память.

Если вы хотите узнать больше, я предлагаю отличную книгу Джона Левина "Линкеры и загрузчики". текст ссылки

Вкратце, это отображение имени, которому вы назначаете переменную для ее адреса в памяти, включая такие метаданные, как тип, область действия и размер. Используется компилятором.

В общем, не только C[++]*. Технически, это не всегда включает прямой адрес памяти. Это зависит от того, на какой язык, платформу и т. Д. Ориентируется компилятор.

В Linux вы можете использовать команду:

nm [объектный файл]

перечислить таблицу символов этого объектного файла.

Таблица символов - это список "символов" в программе / модуле. Символы чаще всего являются именами переменных или функций. Таблицу символов можно использовать для определения того, где в памяти будут находиться переменные или функции.

Проверьте запись таблицы символов в Википедии.

Таблица символов - это важная структура данных, созданная и поддерживаемая компиляторами для хранения информации о появлении различных объектов, таких как имена переменных, имена функций, объекты, классы, интерфейсы и т. Д.

Из книги "Компьютерные системы с точки зрения программиста", глава 7 Связывание. «Символы и таблицы символов»:

Таблица символов — это информация о функциях и глобальных переменных, которые определены и на которые ссылаются в программе.

И важное замечание (из той же главы):

Важно понимать, что локальные символы компоновщика — это не то же самое, что локальные программные переменные. Таблица символов не содержит символов, соответствующих локальным нестатическим программным переменным. Они управляются во время выполнения в стеке и не представляют интереса для компоновщика.

Другие вопросы по тегам