Вызовы функций в памяти - PullRequest
1 голос
/ 23 мая 2011

Что такое вызовы функций в памяти?Может ли кто-нибудь указать мне на какой-то ресурс, обсуждающий эту технику и ее преимущества.Мне нужно узнать о них больше и на данный момент не знаю, куда идти.Похоже, что Google не помогает, потому что переносит меня в область познания, нервной системы и т.д ..

1 Ответ

1 голос
/ 23 мая 2011

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

Функция привязки

Когда программа запускается, компоновщик / загрузчик находит все ссылки на функции в исполняемом файле, которые не могут быть разрешены внутри файла. Он ищет все связанные библиотеки, чтобы найти недостающие функции, а затем выполняет итерации. По крайней мере компоновщик / загрузчик Linux ld.so(8) поддерживает два режима работы: LD_BIND_NOW принудительно разрешает все ссылки на символы при запуске программы. Это отлично подходит для поиска ошибок, и это означает, что нет штрафов за первое использование функции против повторного использования функции. Это может значительно увеличить время загрузки приложения. Без LD_BIND_NOW функции разрешаются по мере необходимости. Это отлично подходит для небольших программ, которые связываются с огромными библиотеками, поскольку решает только несколько необходимых функций, но для более крупных программ это может потребовать повторной загрузки библиотек с диска снова и снова, в течение срока службы программы, и это может радикально влиять на время отклика при запуске приложения.

Пейджинг по требованию

Современные ядра операционной системы манипулируют большим количеством виртуальной памяти , чем физической памятью . Каждое приложение считает, что оно имеет доступ ко всей машине объемом 4 гигабайта памяти (для 32-разрядных приложений) или значительно большей памяти (для 64-разрядных приложений), независимо от фактического объема физической памяти, установленной на машине. Каждая страница памяти нуждается в резервном хранилище , дисковом пространстве, которое будет использоваться для хранения этой страницы, если страница должна быть вытеснена из физической памяти под давлением памяти. Если это чисто данные, они сохраняются в разделе подкачки или в файле подкачки . Если это исполняемый код, то он просто отбрасывается, потому что его можно перезагрузить из файла в будущем, если он должен быть . Обратите внимание, что это не происходит для каждой отдельной функции - вместо этого это происходит на страницах , которые зависят от аппаратного обеспечения. Подумайте 4096 байт на большинстве 32-битных платформ, возможно, более или менее на других архитектурах и со специальными фреймворками, размером более 2 мегабайт или 4 мегабайта. Если есть ссылка на отсутствующую страницу, блок управления памятью *1036* выдаст сигнал page fault, и ядро ​​загрузит недостающую страницу с диска и перезапустит процесс.

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