Что происходит с идентификаторами в программе?

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

Я написал простую программу

#include 

int humans = 9;

 int main() 
 {
        int lions = 2;
        int cubs = populate(lions);
        return 0;
 }

 int populate(int crappyVariable)
 {
    return ++crappyVariable;
}

Я использовал яgcc - S sample.cЯ удивлен выводом на ассемблере. Я потерял все имена переменных & имена функций.

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

У меня вопрос, как он будет вызывать функции или ссылаться на переменные?

Мне действительно интересно узнать о дальнейших этапах вывода, которые были бы в двоичном формате (который не отображается).

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

Я искал информацию в интернете, но не смогне могу найти ничего полезного. Может я'Я не уверен, что искать. Я неЯ не хочу читать большие книги по этому вопросу. Но если есть какие-то статьи, учебники, в которых понятны концепции. Это также было бы полезно.

Я начинающий программист. Так что было бы здорово, если бы вы объяснили это простым, но техническим термином.

РЕДАКТИРОВАТЬ: В ответ на комментарий. Я разбил свой вопрос на несколько вопросов. Вот вторая часть этого вопроса:не понятно с работой компоновщика

Ответы на вопрос(4)

Ваш ответ на вопрос