Читайте также:
|
|
Сведения о конкретной платформе предоставляет процедура:
void GetSystemInfo(LPSYSTEM_INFO lpSystemInfo)Структура данных SYSTEM_INFO описана cледующим образом:
typedef struct _SYSTEM_INFO {
union {
DWORD dwOemId; struct {
WORD wProcessorArchitecture;
WORD wReserved;
};
};
DWORD dwPageSize;
LPVOID lpMinimumApplicationAddress;
LPVOID lpMaximumApplicationAddress;
DWORD_PTR dwActiveProcessorMask;
DWORD dwNumberOfProcessors;
DWORD dwProcessorType;
DWORD dwAllocationGranularity;
WORD wProcessorLevel;
WORD wProcessorRevision;
} SYSTEM_INFO
Более подробная информация приведена в MSDN.
Для динамического отслеживания текущего состояния памяти используется процедура
void GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer); Структура данных _MEMORYSTATUS описана какtypedef struct _MEMORYSTATUS {
Назначение полей данной структуры:
dwMemoryLoad - оценка занятости системы управления памятью(0-100)
dwTotalPhys - общий размер физической памяти RAM-памяти в байтах
dwAvailPhys - общий размер физической памяти RAM-памяти в байтах, доступной для выделения
dwTotalPageFile - максимальное количество байтов, которое может содержаться в страничном файде на жестком диске (или дисках)
dwAvailPageFile - максимальное количество байтов, которое может быть передано процессу из страничного файла
dwTotalVirtual: DWORD - количество байтов в адресном пространстве, принадлежащих лично данному процессу
dwAvailVirtual - суммарный объем всех свободных регионов в адресном пространстве процесса, вызывающего процедуру GlobalMemoryStatus
вычитая из dwTotalVirtual полученное значение, можно найти размер зарезервированной процессом области в виртуальном адресном пространстве
Перед вызовом процедуры необходимо занести в поле dwLength размер структуры в байтах с помощью функции sizeof().
Для запроса информации об участке памяти по заданному адресу (размер, тип памяти, атрибуты защиты) текущего процесса служит функция:
При вызове функции первый параметр должен содержать адрес виртуальной памяти, о котором нужно получить информацию.
Второй параметр – переменная типа, описанного как
typedef struct _MEMORY_BASIC_INFORMATION {
Назначение полей данной структуры:
BaseAddress - значение параметра lpAddress, округленное до значения, кратного размеру страницы
AllocationBase - базовый адрес региона, включающего адрес запроса
AllocationProtect - атрибут защиты региона – некоторые из возможных значений PAGE_NOACCESS, PAGE_READONLY, PAGE_READWRITE
RegionSize - суммарный размер (в байтах) группы страниц, начинающихся с базового адреса и имеющих те же атрибуты защиты, состояние и тип, что и страница, обнаруженная по адресу lpAddress
State - указывает состояние (MEM_FREE, MEM_RESERVE, MEM_COMMIT) всех смежных страниц, имеющих те же атрибуты защиты, состояние и тип, что и страница, расположенная по адресу lpAddress
Для состояния MEM_FREE элементы Allocationbase, Alloocation, Protect и Type не определяются
Protect - содержит атрибут защиты (PAGE_*),общий для всех смежных страниц, имеющих те же атрибуты защиты, состояние и тип, что и страница, расположенная по адресу lpAddress
Type - определяет тип физической памяти (MEM_IMAGE, MEM_MAPPED или MEM_PRIVATE), связанной с группой смежных страниц, имеющих имеющих те же атрибуты защиты,состояние и тип, что и страница, расположенная по адресу lpAddress
Параметр dwLength задает размер структуры MEORY_BASIC_INFORMATION.
Функция VirtualQuery() возвращает число байт, скопированных в буфер. Если возвращено нулевое значение, информация о запрошенном участке НЕ ПОЛУЧЕНА.
Сканируя память в диапазоне от минимального до максимального адреса, можно построить карту виртуальной памяти процесса.
Дата добавления: 2015-07-07; просмотров: 222 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Стратегии подкачки и рабочие наборы страниц | | | На рисунке 1 -28 показаны перечисленные этапы и используемые для их выполнения системные обрабатывающие программы. |