Статус виртуальной памяти
Windows-функция GlobalMemoryStatus позволяет отслеживать текущее состояние па мяти
VOID GlobalMemoryStatus(LPMEMORYSTATUS pmst);
На мой взгляд, она названа крайне неудачно, имя GlobalMemorySlatus подразуме вает, что функция каким-то образом связана с глобальными кучами в 16-разрядной Windows Мне кажется, что лучше было бы назвать функцию GlobalMemoryStatus по другому — скажем, VirtualMemoryStatus.
При вызове функции GlobaUdemoryStatus Вы должны передать адрес структуры MEMORYSTATUS. Вот эта структура:
typedef struct _MEMORYSTATUS
{
DWORD dwLength;
DWORD dwMemoryLoad;
SIZE_T dwTotalPhys;
SIZE_T dwAvailPhys;
SIZE_T dwTotalPageFile;
SIZE_T dwAvailPageFile;
SIZE_T dwTotalVirtual;
SIZE_T dwAvailVirtual;
} MEMORYSTATUS, *LPMEMORYSTATUS;
Перед вызовом GlobalMemoryStatus надо записать в элемент dwLength размер струк туры в байтах. Такой принцип вызова функции дает возможность Microsoft расширять эту структуру в будущих версиях Windows, не нарушая работу существующих прило жений После вызова GlobalMemoryStatus инициализирует остальные элементы струк туры и возвращает управление. Назначение элементов этой структуры Вы узнаете из следующего раздела, в котором рассматривается программа-пример VMStat.
Если Вы полагаете, что Ваше приложение будет работать на машинах с объемом оперативной памяти более 4 Гб или файлом подкачки более 4 Гб, используйте новую функцию GlobalMemoryStatusEx:
BOOL GlobalHemoryStatusEx(LPMEHORYSTATUSEX pmst);
Вы должны передать ей адрес новой структуры MEMORYSTATUSEX:
typedef struct _MEMORYSTATUSEX
{
DWORD dwLength;
DWORD dwMemoryLoad;
DWORDLONG ullTotalPhys;
DWORDLONG ullAvailPhys;
DWORDLONG ullTotalPageFile;
DWORDLONG ullAvaiIPageFile;
DWORDLONG ullTotalVirtual;
DWORDLONfi uUAvailVirtual;
DWOHDLONG ullAvailExtendedVirtual;
} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
Эта структура идентична первоначальной структуре MEMORYSTATUS с одним ис ключением все ее элементы имеют размер по 64 бита, что позволяет оперировать со значениями, превышающими 4 Гб. Последний элемент, ullAvailExtendedVirtual, указы вает размер незарезервированной памяти в самой большой области памячи виртуаль ного адресного пространства вызывающего процесса. Этот элемент имеет смысл толь ко для процессоров определенных архитектур при определенных конфигурациях,