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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
87
0
66 917
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

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

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

stdout 24.08.2016 16:25

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

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

Ответ принят как подходящий

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

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

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

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

Привет, Бен, во втором случае вы имеете в виду таблицу экспорта? То есть, является ли таблица экспорта частным случаем таблицы символов? Или это не связанные между собой понятия?

Pooven 15.10.2014 23:36

Здравствуй. Я считаю, что его нет ни в одном объектном файле, а в нем. Во-вторых, не могли бы вы подробнее объяснить, что вы имели в виду под «конечным местоположением»? Физический адрес или окончательный относительный адрес в исходном коде.

stdout 24.08.2016 16:21

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

nm [object file]

для вывода таблицы символов этого объектного файла. Из этой распечатки вы можете затем расшифровать используемые символы компоновщика по их искореженные имена.

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

Компоновщики и ассемблеры также имеют дело с таблицами символов (часто более простыми, чем таблицы компилятора).

Basile Starynkevitch 01.11.2017 17:01

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