Электронный учебник:


Курс лекций:


Дополнительно:

Практикум:



Наши хостеры:

Виртуальная память

            Резервирование и выделение для использования виртуальной памяти выполняется при помощи функции VirtualAlloc:

            LPVOID VirtualAlloc(

    LPVOID  lpvAddress, // адрес резервируемого (выделяемого) участка    

    DWORD  cbSize, //размер резервируемого (выделяемого) участка  в байтах

    DWORD  fdwAllocationType, // тип выделения

    DWORD  fdwProtect // атрибут защиты для страниц участка  );

Третий параметр функции должен иметь значение MEM_RESERVEдля резервирования участка виртуальной памяти, значение MEM_COMMIT для выделения участка в непосредственное использование и MEM_RESERVE| MEM_TOP_DOWN  для резервирования  участка  в  области

старших адресов (в этом случае первый параметр указывается как  NULL). Функция возвращает

80

адрес выделенного участка, кратный 4К, или NULL при ошибке.

            После использования необходимо освободить полученную ранее виртуальную память при помощи функции VirtualFree:

            BOOL VirtualFree(

    LPVOID  lpvAddress, // адрес освобождаемого участка 

    DWORD  cbSize, // размер участка в байтах

    DWORD  fdwFreeType // тип операции  );

Третий параметр функции может принимать значение MEM_DECOMMIT (страницы помечаются как reserved) или MEM_RELEASE (страницы помечаются как free). Функция возвращает TRUE при успешном освобождении страниц и FALSEпри ошибке.

            В состав API WIN32 входят также функции VirtualLock и VirtualUnLock, позволяющие соответственно зафиксировать страницы в оперативной памяти (запретить их перекачку на диск) и расфиксировать их. Функция VirtualProtect позволяет изменить атрибуты защиты страниц уже выделенного блока. Подробную информацию об этих функциях можно получить в справочной документации или в электронном справочнике WIN32 Programmer’s Reference.

предыдущаяследующая