КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
ЛЕКЦИЯ №5
2. Набор функций вирт. с префикс. (ВП), которые предназначены для непосредственной работы с памятью. Работают минимально со страницей.
LPVOID VirtualAlloc(
LPVOID Addres, SIZE_T Bytes, DWORD Alloctype, DWORD Protection, ); Небольшое отступление: В Windows ВП могут находиться в трех состояниях 1. Free – свободное 2. Reserve – зарезервированное 3. Commit – выделенная
Free – физических носителей не выделено, адресного пространства не выделено Reserve – выделено множество адресов, а физической памяти не выделено Commit – есть адреса и физическое хранилище
Функция VirtualAlloc позволяет двигаться в направлении Free->Reserve->Commit Addres – адрес, по которому мы хотели бы выделить память, если все равно где выделять, то можно указать 0. Bytes – размер участка, который нам нужен. Но размер будет округлен в большую сторону до размера страницы Alloctype – что именно мы хотим сделать: MEM_RESERVE – зарезервировать MEM_COMMIT – выделить кусок MEM_RESET - указывает системе, что вам временно указанный участок памяти не нужен, но мы его не освобождаем MEM_DOWN – приказ системе найти участок памяти в как можно более старших адресах Protection – атрибуты защиты системы PAGE_READONLY – страницу можно только читать PAGE_READWRITE – данные, которые можно и читать и писать PAGE_EXECUTE – код, но его нельзя ни читать ни писать PAGE_EXECUTE_READ – код, который можно читать как данные PAGE_EXECUTE_READWRITE – код, который можно и читать и писать как данные PAGE_NOACCESS – никакого доступа (нельзя читать и писать) PAGE_WRITECOPY: PAGE_NOCACHE – не кэшировать страницы в проц-ый кэш Небольшое отступление: ПИРАМИДА ПАМЯТИ Чем ниже память, тем она больше и дешевле. Кэширование: используется часть из более быстрой памяти для хранения данных из более медленной с целью уменьшить среднее время доступа. PAGE_GUARD - защитная страница 3. BOOL VirtualFree( LPVOID Ptr, SIZE_T Bytes, DWORD FreeType ); FreeType: MEM_DECOMMIT – переводим из COMMIT в RESERVE(физической памяти нет, а адреса остались) MEM_RELEASE – освобождаем память Указатель Ptr должен быть установлен на начало выделенного блока, а размер установлен в 0, Bytes округляется в меньшую сторону до размера страницы.
BOOL Virtual[lock/unlock]( LPVOID Ptr, SIZE_T Bytes ); Virtuallock блокирует участок страниц в физической памяти, запрещая механизм SWAP. Процесс не может заблокировать страниц памяти меньше, чем размер его рабочего набора, который по умолчанию =32страницы – 128 Кб. Увеличивать рабочий размер можно, но для этого нужны права администратора.
Virtualunlock – наоборот.
BOOL VirtualProtect( LPVOID Ptr, SIZE_T Bytes, DWORD Protection, DWORD OldProtect ); Изменяет защиту страницы. Protection – новые атрибуты защиты В OldProtect будет записан старый атрибут защиты. 4. Функции для работы с кучей. Куча – системный объект, который в участке ВП организует динамическое выделение памяти. Используется, когда надо работать с небольшими участками с постоянным выделением и освобождением памяти. Кучу можно создать.
Возвращает дескриптор системного блока. HANDLE HeapCreate( DWORD Options, SIZE_T ImtSize, SIZE_T MaxSize ); Options – опции при создании кучи:0. ImtSize – начальный размер кучи. MaxSize – максимальный размер кучи. Если не получается создать кучу, то функция возвращает значение INVALID_HANDLE_VALUE.
Выделить кусок памяти из кучи LPVOID HeapAlloc( HANDLE heap, DWORD Options, SIZE_T Bytes ); heap – из какой кучи выделить. Options – HEAP_ZERO_MEMORY – выделить и занулить участок памяти. Bytes – размер в байтах.
Освободить память: BOOL HeapFree( HANDLE heap, DWORD Options, LPVOID Ptr );
Заблокировать/разблокировать общую кучу(с этой кучей могут/не могут выполнять различные операции другие процессы) BOOL Heap[lock/unlock] (HANDLE heap);
Удаляет кучу полностью: BOOL HeapDestroy (HANDLE heap);
Дата добавления: 2014-01-07; Просмотров: 310; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |