Многие параметры операционной системы (размер страницы, гранулярность выде ления памяти и др) зависят от используемого в компьютере процессора Поэтому нельзя жестко «зашивать» их значения в исходный код п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 |