Шаг 114 - VirtualLock() и VirtualUnlock().
Виртуальная память сама по себе не очень быстрая, так как она может находиться на диске. Есть ряд задач, для которых необходимо иметь участок памяти с максимально быстрым доступом. Функция 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;
}
Предыдущий Шаг | Следующий Шаг | Оглавление
By Artem.
Используются технологии uCoz
|