Windows для профессионалов


Системная информация


Многие параметры операционной системы (размер страницы, гранулярность выделения памяти и др) зависят от используемого в компьютере процессора. Поэтому нельзя жестко "зашивать" их значения в исходный код пpoгpaмм. Эту информацию надо считывать в момент инициализации процесса с помощью функции GetSystemfnfo:

VOID GetSystemInfo(LPSYSTEM_INFO psinf);

Вы должны передать в GetSystemInfo адрес структуры SYSTEM_INFO, и функция инициализирует элементы этой структуры:

typedef struct _SYSTEM_INFO
{

union
{

DWORD dwOemIdж
// не используйте этот элемент он устарел

struct
{

WORD wProcessorArchitecture;
WORD wRescrved;

};

};

DWORD dwPageSize;
LPVOID lpMinimurnApplirationAddress;
LPVOID lpMaximumApplicationAddress;
DWORD_PTR dwActiveProcessorMask;
DWORD dwNumberOfProcessors;
DWORD dwProcessorType;
DWORD dwAllocationGranularity;
WORD wProcessorLevel;
WORD wProcessorRpvi4inn;

} SYSTEM INFO *LPSYSlEM_INFO;

При загрузке система определяет значения элементов этой структуры, для конкретной системы их значения постоянны Функция GetSystemInfo предусмотрена специально для того, чтобы и приложения могли получать эту информацию. Из всех элементов структуры лишь четыре имеют отношение к памяти. Они описаны в следующей таблице.

Элемент

Описание

dwPageStze

Размер страницы памяти. На процессорах x86 это значение ра но 4096, а на процессорах Alpha — 8192 байтам.

IpMinimumApplicationAddress

Минимальный адрес памяти доступного адресного пространен для каждого процесса. В Windows 98 это значение равно 4 194 304, или 0x00400000, поскольку нижние 4 Мб адресного пространства каждого процесса недоступны. В Windows 2000 это значение равно 65 536, или 0x00010000, так как в этой сие теме резервируются лишь первые 64 Кб адресного пространст каждого процесса.

lpMaximwnApplicationAddress

Максимальный адрес памяти доступного адресного простран ства, отведенного в "личное пользование" каждому процессу. В Windows 98 этот адрес равен 2 147 483 647, или 0x7FFFFFFF, так как верхние 2 Гб занимают общие файлы, проецируемые в память, и разделяемый код операционной системы. В Windows 2000 этот адрес соответствует началу раздела для кода и данных режима ядра за вычетом 64 Кб.

dwAllocationGranularity

Гранулярность резервирования регионов адресного простран ства На момент написания книги это значение составляет 64 для всех платформ Windows.

<


Начало  Назад  Вперед



Книжный магазин