C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 114 - VirtualLock() и VirtualUnlock() / Win 32 API / Win32 API

Шаг 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;
}

| |
Автор Каев Артем.
[AD]