Как различные сегменты, такие как куча, стек, текст, связаны с физической памятью?

  1. Когда программа C компилируется и создается объектный файл (ELF). объектный файл содержит различные разделы, такие как bss, данные, текст и другие сегменты. Я понял, что эти разделы ELF являются частью адресного пространства виртуальной памяти. Я прав? Пожалуйста, поправьте меня, если я ошибаюсь.

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

  3. Я читал, что в созданном ELF-файле секции bss просто содержат ссылки на неинициализированные глобальные переменные. Здесь неинициализированная глобальная переменная означает переменные, которые не инициализируются во время объявления?

  4. Кроме того, я читал, что локальным переменным будет выделено пространство во время выполнения (то есть в стеке). Тогда как на них будут ссылаться в объектном файле?

  5. Если в программе есть определенный участок кода, доступный для динамического распределения памяти.Как на эти переменные будут ссылаться в объектном файле?

Я смущен тем, что эти различные сегменты объектного файла (например, текст, родата, данные, bss, стек и куча) являются частью физической памяти (RAM), где все программы выполняются. Но я чувствую, что мое понимание неверно. Как эти различные сегменты связаны с физической памятью, когда выполняется процесс или программа?

18
задан Jonathan Leffler 12 December 2014 в 23:01
поделиться