Программирование для Windows NT

Создание динамического пула


Если вам нужен динамический пул, вы можете его создать при помощи функции HeapCreate:

HANDLE HeapCreate(

  DWORD  flOptions,     // флаг создания пула

  DWORD  dwInitialSize, // первоначальный размер пула в байтах

  DWORD  dwMaximumSize);// максимальный размер пула в байтах

Параметры dwMaximumSize и dwInitialSize определяют, соответственно, размер зарезервированной для пула памяти и размер памяти, полученной для использования.

Через параметр flOptions вы можете передать нулевое значение, а также значения HEAP_NO_SERIALIZE и HEAP_GENERATE_EXCEPTIONS.

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

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

В случае удачи функция HeapCreate возвращает идентификатор созданного динамического пула памяти. При ошибке возвращается значение NULL (либо возникает исключение, если указан флаг HEAP_GENERATE_EXCEPTIONS).



Содержание раздела