Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpora_1-10_bez_vosmogo1 (1).docx
Скачиваний:
4
Добавлен:
16.04.2019
Размер:
133.72 Кб
Скачать

20. Механизмы работы с памятью. Использование «кучи».

Механизмы работы с памятью:

  1. Виртуальная память (используется для работы с большими объемами памяти);

  2. Отображение файлов на память (используется для быстрой работы с файлом, если необходимо его записиобрабатывать в произвольном порядке, для создания разделяемой памяти между процессами)№

  3. «Кучи» (используются для выделения небольших объемов памяти в приложении).

«Куча» - это зарезервированный (не закрепленный) участок адресного пространства. По мере использования этой памяти диспетчер «кучи» закрепляет за ней память из страничного файла. При освобождении памяти диспетчер «кучи» возвращает страницы системе.

«Куча» всегда может использоваться только одним процессом. Один процесс может иметь несколько «куч».

При создании процесса ОС ставит ему в соответствие стандартную «кучу» размером 1 Мбайт. Этот параметр можно переопределить в командной строке компоновщика или в среде. Сами функции win32 используют «кучи», поэтому уменьшать размер не стоит. Диспетчер «кучи» следит за тем, чтобы отдельные потоки одновременно не имели доступа к «куче». Стандартную «кучу» создает сама ОС и уничтожает она ее сама. Дескриптор стандартной «кучи» возвращает функция GetProcessHeap:

HANDLE GetProcessHeap(VOID).

Дескриптор стандартной «кучи» можно использовать для выделения памяти с помощью функции HeapAlloc ():

LPVOID HeapAlloc(

HANDLE hHeap, //дескриптор личного блока («кучи»)

DWORD dwFlags, //определяет флаги, которые более

//приоритетны, чем флаги при создании «кучи»

DWORD dwBytes //количество выделенных байт);

Возвращаемое значение:

Успех – адрес начала выделенной памяти.

Ошибка и не задано HEAP_GENERATE_EXCEPTIONS, функция возвращает NULL, а если задано, функция генерирует исключение (STATUS_NO_MEMORY – недостаток доступной памяти, STATUS_ACCESS_VIOLATION – неверные параметры функции).

Кроме кучи, предусмотренной по умолчанию, можно использовать дополнительные области памяти («кучи»).

Создание «кучи». Для создания используется функция HeapCreate. Функция выделяет непрерывный блок памяти в виртуальном адресном пространстве текущего процесса и выделяет физическую память для начального блока выделенной памяти.

HANDLE HeapCreate(

DWORD flOptions, // определяет атрибуты новой «кучи»

DWORD dwInitialSize, // определяет начальный размер блока в байтах

DWORD dwMaximumSize // максимальный размер в байтах

);

Возвращаемое значение:

Успех – дескриптор области памяти.

Ошибка – NULL.

21. Исследование виртуальной памяти. Системная информация.

Формируется функцией GetSystemInfo:

VOID GetSystemInfo (LPSYSTEM_INFO lpSystemInfo);

lpSystemInfo – адрес начала структуры типа SYSTEM_INFO с системной информацией.

Структура SYSTEM_INFO:

Typedef struct_SYSTEM_INFO{ //sinf

union{

DWORD dwOemld; //остается для совместимости с предыдущими

//версиями WINDOWS

struct{

WORD wProcessorArchitecture; //определяет архитектуру системного

//процессора

WORD wReserved; //резерв

DWORD dwPageSize; //размер страницы

LPVOID lpMinimumApplicationAddress; //указатель на минимальный

//адрес, доступный приложению и DLL

LPVOID lpMaximumApplicationAddress; //указатель на максимально

//допустимый адрес, доступный приложению и DLL

DWORD dwActiveProcessorMask; //определяет маску для

//рассматриваемого процессора системы

DWORD dwNumberOfProcessors; //количество процессоров в системе

DWORD dwProcessorType; //используется для совместимости со

//старыми ОС

DWORD dwAllocationGranularity; //определяет адрес выравнивания и

//единицу измерения выделяемой виртуальной памяти

WORD wProcessorLevel; //дополнительные сведения о процессоре

WORD wProcessorRevision; //определяет архитектурно зависимую

//дополнительную информацию о процессоре

}SYSTEM_INFO;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]