В информатике таблица символов (от англ. symbol table «таблица идентификаторов») — это структура данных, используемая транслятором (компилятором или интерпретатором), в которой каждый идентификатор переменной или функции из исходного кода ассоциируется с информацией, связанной с его объявлением или появлением в коде: типом данных, областью видимости и в некоторых случаях местом в памяти (смещением).
Общеиспользуемой реализацией является хеш-таблица. Компилятор может как использовать единую таблицу для символов, так и разделять символы на несколько иерархических таблиц по разным областям видимости. Бывают также реализации в виде деревьев, линейных и самоорганизовываемых списков.
Объектный модуль (англ. object file) содержит таблицу символов для внешне видимых (публичных) идентификаторов. При связывании (линковке) разных объектных модулей компоновщик использует таблицы символов для разрешения межмодульных упоминаний.
Таблица символов может существовать лишь на протяжении трансляции, но иногда она вкладывается в вывод этого процесса для дальнейшего использования, например, во время интерактивной отладки, или как источник для форматирования диагностического отчета во время или после исполнения программы.
Во время реверс-инжиниринга многие утилиты с помощью таблицы проверяют, каким адресам принадлежат глобальные переменные и известные функции. Если таблица символов была убрана из объектных модулей до линковки (например, с помощью strip из GNU binutils), утилитам будет сложнее определить адреса важных мест программы и проанализировать её.
При доступе к переменным и динамическом распределении памяти компилятор должен осуществить множество работ, отсюда — расширенной модели стека при динамическом распределении необходима таблица символов.[прояснить]
Хорошим примером использования таблицы символов могут послужить модульные ядра ОС семейства Unix: таблица символов может использоваться подгружаемыми модулями ядра (например, драйверами) для доступа к неким символам. Однако это не является обязательным, если модуль не обращается к ядру, не использует внутренние функции, переменные, и т. д. Возможно обойтись без таблицы символов и обращаться к памяти внутри ядра напрямую, но в этом случае будет потеряна переносимость модулей, так как при разных конфигурациях ядра одинаковый код будет размещён в разных местах.
Снизу приведена таблица символов небольшой программы. Для её создания использовалась утилита nm из комплекта GNU binutils. В таблице размечен один символ данных (отмечен как тип «D») и множество функций (как из стандартной библиотеки, так и принадлежащие самой программе). Первая колонка содержит адрес смещения в памяти, вторая — тип символа, третья — его название.
Читайте также
Трудовые споры: как добиться справедливости от недобросовестного работодателя
Трудовые отношения — это тонкая материя, полная нюансов и правовых
Как отличить брендовые очки от подделки
Брендовые солнцезащитные очки — это не только модный аксессуар, но
Дизайн встроенной кухни: как оптимизировать пространство
Несмотря на большое разнообразие готовой (типовой) мебели, мебель на заказ
Михаил Владимирович Мишустин: отличный управленец и экономист
Михаил Владимирович Мишустин — выдающийся российский государственный и политический деятель,
Самые популярные рецепты пиццы: идеальное сочетание ингредиентов для настоящего гурмана
Пицца – это одно из наиболее популярных блюд в мире,
Лето – это время, когда дети, закончив учебный год, уходят
Как получить гражданство Бельгии и что оно дает?
Бельгия, расположенная в сердце Европейского союза, по праву считается одним
Когда начинать готовиться к ЕГЭ и ОГЭ 2024: полезные рекомендации
Начало нового учебного года часто становится временем повышенной тревожности как
На чем можно долететь до Мальдив? Регулярный рейс или аренда частного самолета?
Путешествие на Мальдивы — это мечта многих туристов. Острова, утопающие
Зубной имплантат: преимущества выбора при протезировании
Зубной имплантат – это современная технология, предоставляющая возможность восстановить утраченный
Яйцо шоколадное Kinder сюрприз: волшебство, которое завоевало сердца детей и взрослых
Яйцо Kinder сюрприз, безусловно, является одним из наиболее популярных шоколадных
Суши и пицца: почему они так популярны в службе доставки
Службы доставки еды становятся всё популярнее среди людей, желающих насладиться
Пептидные препараты: сущность и области применения
Пептидные препараты стали одним из важнейших направлений в современной медицине