Создание динамического пула
Если вам нужен динамический пул, вы можете его создать при помощи функции 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).