Функция HeapSize возвращает размер в байтах блока памяти, выделенного ранее из кучи при помощи вызовов HeapAlloc или HeapReAlloc.
function HeapSize( hHeap: THandle; // дескриптор кучи dwFlags: DWORD; // опции получения размера lpMem: Pointer // указатель на фрагмент памяти ): DWORD; stdcall;
Параметры
hHeap [in]
Указывает на кучу, которой принадлежит фрагмент памяти, размер которого
требуется определить. Должен быть получен в результате одного из вызовов
HeapCreate или
GetProcessHeap.
dwFlags [in]
Указывает на несколько управляющих аспектов при доступе к памяти. Перекрывает
соответствующие значения, которые были заданы при создании кучи (вызов
HeapCreate параметр flOptions).
| Флаг | Назначение |
|---|---|
HEAP_NO_SERIALIZE1) |
Указывает, что пока выполняется текущий вызов HeapSize, к куче не будут происходить обращения из других потоков. Важно! Это значение не может быть указано при обращении к куче процесса. Система может создавать свои собственные потоки без участия приложения, например такие, как обработчик нажатия Ctrl+C, которые могут выполнять доступ к куче процесса. |
lpMem [in]
Указатель на блок памяти, размер которого следует получить. Этот указатель
должен вернуть один из вызовов HeapAlloc или
HeapReAlloc.
Возвращаемое значение
В случае удачного завершения функция должна вернуть размер фрагмента памяти в байтах.
В случае ошибки функция возвращает -1.
Важно! В случае возникновения ошибки приложение НЕ ДОЛЖНО производить вызов SetLastError. Приложение также не должно производить вызов GetLastError для получения расширенной информации об ошибке. Это, вероятно, связано с тем, что функции GetLastError и SetLastError сами используют кучу процесса.
Описание
Защита от повторной входимости гарантирует, что в том случае, когда к куче будет происходить одновременно обращение из двух или нескольких потоков (например, один будет выделять память, а другой будет ее освобождать), работа с кучей будет происходить корректно. Тем не менее защита от повторной входимости требует некоторых затрат ресурсов, поэтому вы должны использовать ее только в том случае, когда несколько потоков одновременно обращаются к куче. Задавая флаг HEAP_NO_SERIALIZE, вы можете отключить защиту от повторной входимости. Одновременное обращение к куче из двух или нескольких потоков, при отключенной защите от повторной входимости, может повлечь за собой разрушение кучи. Поэтому вы должны отключать защиту от посторной входимости только в одном из следующих случаев:
Примечание: для того, чтобы уберечь себя от ошибки нарушения доступа (access violation), вы должны защитить блоками структурной обработки исключений любой код, выполняющий операции чтения/записи в кучу. Для большей информации по этому вопросу смотрите раздел "Структурная обработка исключений".
Требования
Windows NT/2000: Требуется Windows NT 3.1 или более поздняя версия
Windows 95/98: Требуется Windows 95 или более поздняя версия
Бибиотека: Kernel32.dll
Подключаемый модуль: Windows
Смотри также:
HeapReAlloc |
HeapUnlock![]() |
© Mystic, 2002