Виртуальная память сама по себе не очень быстрая, так как она может находиться на диске. Есть ряд задач, для которых необходимо иметь участок памяти с максимально быстрым доступом. Функция VirtualLock() позволят предотвратить запись памяти на диск.
BOOL VirtualLock ( LPVOID lpAddress, // адрес начала памяти SIZE_T dwSize // количество байтов );
Если фиксация больше не нужна, то ее можно убрать функцией VirtualUnlock().
BOOL VirtualUnlock ( LPVOID lpAddress, // адрес начала памяти SIZE_T dwSize // количество байтов );
При успешном выполнении обе функции возвращают ненулевое значение.
Смотрим пример:
// testAlloc.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "windows.h" #include "iostream.h" #define MEMSIZE 4000 void main() { void *p=NULL; p=VirtualAlloc(NULL,MEMSIZE,MEM_RESERVE,PAGE_READWRITE); if (p!=NULL) { if (VirtualLock(p,MEMSIZE)) cout << "Lock" << endl; else cout << "Error Lock" << endl; cout << "Press key and Enter- "; char i; cin >> i; if (VirtualUnlock(p,MEMSIZE)) cout << "Unlock" << endl; else cout << "Error Unlock" << endl; cout << "OK Alloc " << endl; if (VirtualFree(p,0,MEM_RELEASE)) cout << "Ok Free" << endl; else cout << "Not Free" << endl; } else cout << "Error Alloc " << endl; }