Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows


Программа-пример VMAIloc - часть 2


Чтобы посмотреть, как работает функция сбора мусора, очистите элемент масси ва с индексом 46. Заметьте, что карта памяти пока не изменилась Теперь щелкните кнопку Garbage Collect. Программа освободит страницу, содержащую 46-й элемент, и карта памяти сразу жс обновится, как показано ниже Заметьте, что функцию Garbage Collect можно легко использовать в любых других приложениях Я реализовал ее так, чтобы она работала с массивами структур данных любого размера; при этом струк тура не обязательно должна полностью умещаться на странице памяти. Единствен ное требование заключается в том, что первый элемент структуры должен быть зна чением типа BOOL, которое указывает, задействована ли данная структура

rihter15-3.jpg

И, наконец, хоть это и не видно на экране, закрытие окна приводит к возврату всей переданной памяти и освобождению зарезервированного региона.

Но есть в этой программе еще одна особенность, о которой я пока не упоминал Программе приходится определять состояние памяти в адресном пространстве ре гиона в трех случаях

  • После изменения индекса. Программе нужно включить кнопку Use и отклю чить кнопку Clear (или наоборот)
  • В функции сбора мусора. Программа, прежде чем проверять значение флага fInUse, должна определить, была ли передана память.
  • При обновлении карты памяти Программа должна выяснить, какие страницы свободны, какие — зарезервированы, а какие — переданы

Все эти проверки VMAlloc осуществляет через функцию VirtualQuery, рассмотрен ную в предыдущей главе.

VMAIIoc




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