Элементы программы в основной памяти - PullRequest
1 голос
/ 20 января 2012

Какие программные элементы должны присутствовать в оперативной памяти, когда выполняется такой процесс, как исполняемый файл c-программы a.out? Код программы тоже есть? И если да, то зачем это нужно?

Ответы [ 3 ]

1 голос
/ 20 января 2012

да, код a.out присутствует в памяти при запуске a.out.указатель инструкции (или регистр) указывает на текущую операцию, выполняемую в памяти, и большинство операций также переводят указатель инструкции на следующую операцию.хотя, если под кодом вы подразумеваете исходный код C, это не всегда так - в памяти должен находиться только собранный исполняемый байт-код.у компилятора / компоновщика есть флаги для включения кода C в собранный выходной исполняемый файл, чтобы упростить отладку.

Если мы говорим о виртуальной памяти процесса, это также будет включать некоторую память-сопоставленные регистры ввода-вывода, некоторые функции пространства ядра и любые библиотеки, которые требуются программе (по крайней мере, libc для операций общего типа).

0 голосов
/ 20 января 2012
Is program code also there?

да, код вашей программы также будет в ОЗУ

на самом деле любая программа c имеет 3 основных сегмента в памяти

* Data Segment
* Code Segment
* Stack and Heap areas

ваш код идет в сегменте кода.
enter image description here

см. Эта статья

0 голосов
/ 20 января 2012

В принципе, машинный код находится внутри адресного пространства процесса и очень часто в оперативной памяти.Однако существуют ситуации, когда машинный код еще не находится в ОЗУ, и ядро ​​должно загрузить его с диска.Это происходит прозрачно из-за виртуальной памяти .Конкретно, системный вызов execve (2) устанавливает отображение памяти для различных сегментов в исполняемом двоичном файле ELF , так же, как mmap (2) (этосистемный вызов, с munmap и mprotect для изменения карты памяти.

Посмотрите на /proc/1234/maps процесса 1234, чтобы понять больше, или просто запустите

  cat /proc/self/maps

чтобы получить карту памяти процесса, выполняющего это cat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...