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

       

Работа со стандартным пулом памяти


Второй способ выделения блока памяти основан на использовании стандартного пула. Для получения памяти из стандартного пула мы пользуемся функцией HeapAlloc, передавая ей в качестве первого параметра значение идентификатора стандартного пула памяти, полученное от функции GetProcessHeap:

lpszBuff = (char*)HeapAlloc(GetProcessHeap(),

  HEAP_ZERO_MEMORY, 0x1000);

Так как мы указали флаг HEAP_ZERO_MEMORY, полученный блок памяти будет расписан нулями. Флаг HEAP_GENERATE_EXCEPTIONS не указан, поэтому после вызова функции мы должны проверить значение, полученное от нее.

На следующем этапе приложение выполняет копирование строки в блок памяти и отображение ее в консольном окне:

strcpy(lpszBuff, "Test string");

printf("String:>%s<\n", lpszBuff);

Так как исключения не обрабатываются, при их возникновении работа приложения завершится аварийно.

После использования приложение освобождает блок памяти, полученный из стандартного пула, для чего вызывается функция HeapFree:

HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, lpszBuff);

Последний фрагмент приложения демонстрирует использование функций malloc и free для работы со стандартным пулом памяти и в комментариях не нуждается.



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