Windows для профессионалов


В какой момент региону передают физическую память - часть 3


Если да, больше ничего не делать, нет — вызвать VirtuaiAlloc для передачи памяти. Этот метод на деле еще хуже, чем первый он не только замедляет выполнение, но и увеличивает размер программы из-за дополнительных вызовов VirtualQuery.
  • Вести учет, каким страницам передана физическая память, а каким — нет. Это повысит скорость работы программы Вы избежите лишних вызовов VirtualAlloc, а программа сможет — быстрее, чем система — определять, передана ли память. Недостаток этого метода в том, что придется отслеживать передачу страииц; иногда это просто, но может быть и очень сложно - все зависит от конкретной задачи.
  • Самое лучшее — использовать структурную обработку исключений (SEH). SEH — одно из средств операционной системы, с помощью которого она уведомляет приложения о возникновении определенных событий. В общем и целом, Вы добавляете в программу обработчик исключений, после чего любая попытка обращения к участку, которому не передана физическая память, заставляет систему уведомлять программу о возникшей проблеме. Далее программа передает память нужному участку и сообщает системе, что та должна по вторить операцию, вызвавшую исключение. На этот раз доступ к памяти пройдет успешно, и программа, как ни в чем не бывало, продолжит работу. Таким образом, Ваша задача заметно упрощается (а значит, упрощается и код); кроме того, программа, не делая больше лишних вызовов, выполняется быстрее. Но подробное рассмотрение механизма структурной обработки исключений мы отложим до глав 23, 24 и 25. Программа-пример Spreadsheet в главе 25 продемонстрирует именно этот способ использования виртуальной памяти.



  • Начало  Назад  Вперед