Ниже приводится объяснение очень высокого уровня:
Во-первых, символы не только в мире C ++. Они существуют в двоичных файлах нескольких языков высокого уровня, таких как C, C ++ и т. Д., Если они собраны с некоторыми заданными настройками. Давайте возьмем определение
'int i = 2;'
В двоичном формате «i» - это просто область памяти (например, 0x10203040), которая инициализируется с помощью 2. Нет области памяти с именем «i». Имя 'i' присваивается этой ячейке памяти благодаря символам отладки, которые загружаются с помощью двоичных файлов (при построении с определенными флагами), которые поддерживают отображение «ячейки памяти» на «имена уровня источника».
Например, в формате PE предусмотрена директория отладки, в которой хранится информация о символах отладки. Они очень полезны при отладке, потому что в отсутствие таких символов отладки отладка только с точки зрения бинарных нулей и единиц будет действительно очень сложной задачей. Поэтому, когда вы отлаживаете такой двоичный файл (который имеет вышеуказанное определение «i»), который был построен с флагами отладки, отладчик знает, что расположение памяти «0x10203040» соответствует «i» благодаря каталогу отладки в PE файл.