Динамическое управление памятью под Linux - PullRequest
1 голос
/ 28 марта 2010

Я знаю, что в Windows есть функции API, такие как global_alloc () и тому подобное, которые выделяют память и возвращают дескриптор, затем этот дескриптор может быть заблокирован и возвращен указатель, а затем снова разблокирован. Когда разблокировано, система может перемещать этот фрагмент памяти, когда ему не хватает места, оптимизируя использование памяти.

У меня вопрос, есть ли что-то подобное в Linux, и если нет, то как Linux оптимизирует использование памяти?

Ответы [ 2 ]

4 голосов
/ 28 марта 2010

Эти функции Windows появились в то время, когда все программы работали в одном и том же адресном пространстве в реальном режиме. Linux и современные версии Windows запускают программы в отдельных адресных пространствах, поэтому они могут перемещать их в оперативной памяти, переназначая физический адрес, к которому относится конкретный виртуальный адрес, в таблицах . Не нужно обременять программиста такими низкоуровневыми деталями.

Даже в Windows больше нет необходимости использовать такие функции, за исключением случаев взаимодействия с небольшим количеством старых API. Я полагаю, что в блоге и книге Рэймонда Чена есть некоторые обсуждения этой темы, если вы заинтересованы в более подробной информации. Например, часть 4 серии по истории GlobalLock.

1 голос
/ 18 октября 2013

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

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