Связь между dwPageSize и dwAllocationGranularity

Я читаю исходный код Google TCMalloc (портирование Windows).

int getpagesize()
{
static int pagesize = 0;
if (pagesize == 0)
{
SYSTEM_INFO system_info;
GetSystemInfo(&system_info);
pagesize = std::max(system_info.dwPageSize, system_info.dwAllocationGranularity);
}
return pagesize;
}

Как вы можете увидеть в фрагменте кода выше pagesize(то есть единица выделения) рассчитывается как максимальное значение между dwPageSize и dwAllocationGranularity.
То, что я хочу знать, — это тип отношений между этими двумя значениями: необходимо ли рассчитывать значение так, как это объяснено выше? И есть ли ситуации, в которых dwPageSize может быть больше, чем dwAllocationGranularity?

4

Решение

Отказ от ответственности: Этот ответ основан не на какой-либо документации, а только на моей интерпретации этих констант.

Я предполагаю, что размер страницы указан правильно. Я предполагаю, что гранулярность выделения относится к гранулярности интерфейса выделения памяти ОС.

Есть два случая для рассмотрения:

  • гранулярность выделения больше размера страницы. Выделение блока памяти размером с страницу в таком случае приведет к фактически большему выделению ресурсов, поэтому его следует избегать.

  • гранулярность выделения меньше размера страницы. Выделение блока памяти размером гранулярности выделения все равно приведет к выделению / отображению всей страницы, поэтому это следует предотвратить.

По сути, в обоих случаях ОС будет выделять больше памяти, чем запрошено. Используя максимум, этого можно избежать, так что код выделения (пользовательского пространства) может быть (относительно) определенным относительно его фактического использования памяти.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]