-
Когда скомпилирована программа C и создается объектный файл (ELF). объектный файл содержит различные разделы, такие как bss, данные, текст и другие сегменты. Я понял, что эти разделы ELF являются частью адресного пространства виртуальной памяти. Я прав? Пожалуйста, поправьте меня, если я ошибаюсь.
-
Также будет создана виртуальная память и таблица страниц, связанная с скомпилированной программой. Таблица страниц связывает адрес виртуальной памяти, присутствующий в ELF, с реальным адресом физической памяти при загрузке программы. Правильно ли я понимаю?
-
Я прочитал, что в созданном файле ELF разделы bss просто сохраняют ссылку на неинициализированные глобальные переменные. Здесь неинициализированная глобальная переменная означает переменные, которые не были проиндексированы во время объявления?
-
Кроме того, я читал, что локальным переменным будет выделено пространство во время выполнения (т.е. в стеке). Затем как они будут ссылаться в объектном файле?
-
Если в программе есть определенный раздел кода, доступный для динамического распределения памяти. Как эти переменные будут ссылаться в объектном файле?
Я смущен, что эти разные сегменты объектного файла (например, текст, родата, данные, bss, стек и куча) являются частью физической памяти (ОЗУ), где выполняются все программы. Но я чувствую, что мое понимание ошибочно. Как эти разные сегменты связаны с физической памятью при выполнении процесса или программы?