Как памятью кода управляют?

При разговоре о памяти процесса я слышал о вещах как память кода и память данных.

И для памяти данных, существует 2 главных руководящих механизма, стек и "куча".

Я теперь задаюсь вопросом, как памятью кода управляют? И кто управляет им?

Простите мне, если мой оператор не так ясен.

Спасибо.

13
задан smwikipedia 9 July 2010 в 08:16
поделиться

4 ответа

Я рекомендую http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory (и другие статьи, связанные с памятью), если вам интересно узнать больше о деталях управления памятью процесса.

память кода = текстовый сегмент

Обратите внимание, что адресное пространство составляет 4 ГБ. Когда ядро создает процесс, оно предоставляет ему виртуальную память. Ниже приведен пример 32-битной ОС. Ядро управляет тем, какие адреса отображаются в реальную оперативную память через MMU процессора. Таким образом, ядро и MMU управляют памятью кода, так же как и всем адресным пространством процесса.

Borrowed from duartes.org
(источник: duartes.org)

17
ответ дан 1 December 2019 в 22:06
поделиться

Ваша операционная система предоставляет так называемые системные вызовы для динамического выделения памяти (malloc, free и т. Д.), А также предоставляет механизм для загрузки и выполнения вашей программы.

Когда программа загружается операционной системой, устанавливается текстовый сегмент (память кода), и статически выделенная память в вашей программе становится немедленно доступной. Когда ваш код вызывает функции, (статически распределенные) переменные в ваших функциях выделяются в стеке, а ваша динамически выделяемая память (например, с использованием malloc ()) выделяется в куче. Во время работы вашей программы вы (программист) несете ответственность за управление памятью (отсутствие этого приведет к утечкам памяти и, в конечном итоге, вызовет нехватку памяти для длительно выполняющейся программы, что приведет к сбою или, в крайнем случае, случаи, в зависимости от ОС, снимают с себя всю ОС).

См. Также эту статью: http://www.maxi-pedia.com/what+is+heap+and+stack

0
ответ дан 1 December 2019 в 22:06
поделиться

Он управляется операционной системой. Когда программа запускается, ее код загружается из исполняемого файла по некоторому адресу памяти.В зависимости от характера программы некоторые изменения вносятся в разделы кода, например разрешены переходы к динамически подключаемым библиотекам.

По предложению Space_C0wb0y, ознакомьтесь с en.wikipedia.org/wiki/Dynamic_linker , чтобы узнать подробности о том, что происходит.

2
ответ дан 1 December 2019 в 22:06
поделиться

Память кода не требует управления, потому что она не меняется. Когда исполняемый файл загружается в адресное пространство, код просто считывается из исполняемого файла в память. Фактически, в современных операционных системах сегмент кода - это просто память, отображаемая в исполняемый файл.

4
ответ дан 1 December 2019 в 22:06
поделиться