GlobalMemoryStatusEx • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция GlobalMemoryStatusEx выбирает информацию о доступной в настоящее время памяти. Функция возвращает информацию и о физической, и о виртуальной памяти и может обрабатывать объемы памяти, превышающие 4 Гбайт. |
||||||||||||||
Синтаксис |
BOOL GlobalMemoryStatusEx( LPMEMORYSTATUSEX IpmstMemStat ) |
||||||||||||||
Параметры IpmstMemStat |
LPMEMORYSTATUSEX Указатель на структуру MEMORYSTATUSEX, в которой возвращается информация о текущем состоянии доступа к памяти. Перед вызовом этой функции должно быть установлено значение члена dwLength. См. приведенное ниже определение структуры MEMORYSTATUSEX. |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
GlobalAlloc, VirtualAlloc |
||||||||||||||
Определение MEMORYSTATUSEX typedef struct MEMORYSTATOS{ DWORD dwLength; DWORD dwMemoryLoad; DWORDLONG ullTotalPhys ; DWORDLONG ullAvailPhys; DWORDLONG ullTotalPageFile; DWORDLONG ullAvailPageFile ; DWORDLONG ullTotalVirtual ; DWORDLONG ullAvailVirtual ; DWORDLONG ullAvailExtendedVirtual ; } MEMORYSTATUSEX, *LPMEMORYSTATUSEX ; |
|||||||||||||||
Члены dwLength |
DWORD. Размер структуры. Вызывающий процесс должен установить этот член до вызова функции GlobalMemoryStatusEx. |
||||||||||||||
dwMemoryLoad |
DWORD. Текущее состояние использования памяти. Это — число от 0 до 100; здесь 0 обозначает полное отсутствие загрузки памяти, а 100 — полную загрузку памяти. |
||||||||||||||
ullTotalPhys |
DWORDLONG. Общее число байтов физической памяти. |
||||||||||||||
ullAvailPhys |
DWORDLONG. Число байтов доступной физической памяти. |
||||||||||||||
ullTotalPageFile |
DWORDLONG. Общее число байтов, которое может храниться в файле подкачки. Этот параметр не представляет фактический размер файла подкачки на диске. |
||||||||||||||
ullAvailPageFile |
DWORDLONG. Число байтов, доступных в файле подкачки. |
||||||||||||||
ullTotalVlrtual |
DWORDLONG. Общее число байтов виртуальной памяти, доступной вызывающему процессу. |
||||||||||||||
ullAvailVlrtual |
DWORDLONG. Число незарезервированных и невыделенных байтов виртуальной памяти. |
||||||||||||||
ullAvailExtendedVirtual |
DWORDLONG. Размер в байтах незарезервированной и невыделенной памяти в расширенной части виртуального адресного пространства вызывающего процесса. |
||||||||||||||
GlobalReAlloc • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция GlobalReAlloc позволяет менять размер или атрибуты глобального объекта памяти. Размер объекта может увеличиваться или уменьшаться в соответствии с изменяющимися потребностями приложения. |
||||||||||||||
Синтаксис |
HGLOBAL GlobalReAlloc( HGLOBAL hMem, DWORD dwBytes, UINT u Flags ) |
||||||||||||||
Параметры hМет |
HGLOBAL. Возвращенный функцией GlobalAlloc или GlobalReAlloc дескриптор глобального объекта памяти, который должен быть перераспределен. |
||||||||||||||
dw Bytes |
DWORD. Новый размер блока памяти в байтах. Если этот параметр равен 0 и параметр uflags указывает флажок GMEM_MOVEABLE, возвращается дескриптор объекта памяти, отмеченного, как отброшенный. Если параметр uFlags указывает флажок GMEM_MODIFY, этот параметр игнорируется. |
||||||||||||||
uflegt |
UINT. Определяет перераспределение глобального объекта памяти. Флажок GMEMJMODIFY может быть объединен с флажком, приведенным в табл. 11.4. |
||||||||||||||
Таблица 1 1.4. Значение флажка, применяемого с флажком GMEM_MODIFY параметра uFlag функции GlobalReAlloc |
|||||||||||||||
Флажок GMEM_MOVEABLE |
ОписаниеПреобразовать неподвижный объект памяти в перемещаемый объект памяти. |
||||||||||||||
Если в этом параметре не указан флажок GMEM_MODIFY, он может представлять собой любую комбинацию флажков, перечисленных в табл. 11.5. |
|||||||||||||||
Таблица 1 1.5. Значения параметра uFlags функции GlobalReAlloc |
|||||||||||||||
Флажок |
Описание |
||||||||||||||
GMEM_MOVEABLE |
Распределить перемещаемую память. Если параметр dwByfes равен 0, вызов этой функции приводит к отбрасыванию блока памяти, который перед этим был перемещаемым и отбрасываемым. Если число блокировок объекта не равно нулю или блок памяти не является перемещаемым и отбрасываемым, функция не может быть завершена успешно. Если параметр dwBytes отличен от нуля, система получает разрешение переместить перераспределенный блок в новое место, не меняя атрибута "перемещаемый" или "неподвижный" объекта памяти. |
||||||||||||||
Флажок |
Описание |
||||||||||||||
Если объект памяти является неподвижным, возвращаемый дескриптор может отличаться от дескриптора, указанного параметром hMem. Если объект памяти является перемещаемым, блок памяти может быть перемещен без объявления дескриптора недействительным, даже если память в настоящее время блокирована в результате предыдущего вызова функции GlobalLock. Для получения нового адреса блока памяти применяется функция GlobalLock. |
|||||||||||||||
GMEM_ZERCHNIT |
Инициализировать вновь выделяемую память нулями, если размер объекта памяти возрастает. |
||||||||||||||
Возвращаемое значение |
HGLOBAL. В случае успешного выполнения — дескриптор перераспределенного объекта памяти; в ином случае — NULL. |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
GlobalAlloc, GlobalDiscard, GlobalFree |
||||||||||||||
Пример |
См. пример для функции GlobalAlloc. |
||||||||||||||
GlobalSize • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция GlobalSize определяет фактическое число байтов, распределенных для глобального объекта памяти. После распределения объекта памяти размер блока памяти может превышать затребованный размер. |
||||||||||||||
Синтаксис |
DWORD GlobalSize( HGLOBAL hMem ) |
||||||||||||||
Параметры hMem |
HGLOBAL. Дескриптор глобального объекта памяти, возвращенного функцией GlobalAlloc, GlobalReAlloc или GlobalHandle. |
||||||||||||||
Возвращаемое значение |
DWORD. Размер глобального блока памяти в байтах. Если параметр hMem не представляет собой допустимый дескриптор памяти или объект был отброшен, возвращаемое значение — 0. |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
GlobalFlags, GlobalAlloc, GlobalHandle, GlobalReAlloc |
||||||||||||||
Пример |
См. пример для функции GlobalAlloc. |
||||||||||||||
GlobalUnlock • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция GlobalUnlock позволяет разблокировать глобальный объект памяти. При каждом вызове в приложении функции GlobalLock для объекта памяти число его блокировок увеличивается. 'Функция GlobalUnlock уменьшает число блокировок объекта памяти, который был распределен с флажком GMEM_MOVEABLE. Функция GlobalUnlock не воздействует на объекты памяти, распределенные с флажком GMEM FIXED. Прежде чем память может быть перемещена или отброшена системой Windows, функция GlobalUnlock должна быть вызвана столько же раз, сколько и функция GlobalLock. |
||||||||||||||
Синтаксис |
BOOL GlobalUnlock( HGLOBAL hMem ) |
||||||||||||||
Параметры hMem |
HGIX)BAL. Дескриптор глобального объекта памяти, возвращенного функцией GlobalAlloc или GlobalReAJIoc. |
||||||||||||||
Возвращаемое значение |
BOOL. Если объект памяти после уменьшения числа блокировок все еще заблокирован, возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE. |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
GlobalLock, GlobalAlloc, Global ReAlloc, Global Free |
||||||||||||||
Пример |
См. пример для функции GlobalAlloc. |
||||||||||||||
НеарАНос • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция HeapAlloc распределяет блок памяти из кучи. Распределенная память не является перемещаемой. |
||||||||||||||
Синтаксис |
LPVOID НеарА11ос( HANDLE hHeap, DWORD dwHags, DWORD dwBytes) |
||||||||||||||
Параметры |
|||||||||||||||
hHeap |
HANDLE. Дескриптор кучи, в которой должна быть распределена память. Это — дескриптор, возвращенный функцией HeapCreate или GetProcessHeap. |
||||||||||||||
dwFlags |
DWORD. Определяет способ распределения памяти. Флажки, указанные в качестве этого параметра, отменяют соответствующий флажок, указанный при создании кучи с применением HeapCreate. В качестве этого параметра можно указать один или несколько флажков, перечисленных в табл. 11.6. |
||||||||||||||
Таблица 1 1.6. Значения параметра dwFlags функции HeapAlloc |
|||||||||||||||
Флажок |
Описание |
||||||||||||||
HEAP_GENERATE_EXCEPTIONS |
В качестве указания на ошибку активизировать исключение, вместо возврата значения NULL. |
||||||||||||||
HEAP_NO_SERIAUZE |
Взаимоисключающая блокировка не должна применяться в то время, как функция обращается к куче. Если этот флажок указан, к куче должна обращаться одновременно только одна нить. Если одну и ту же кучу совместно используют несколько нитей, этот флажок не должен быть установлен. |
||||||||||||||
HEAP_ZERO_MEMORY |
Инициализировать распределенную память значениями 0. |
||||||||||||||
dw Bytes |
DWORD. Число байтов, которое должно быть распределено. Если куча, указанная параметром, hHeap имеет постоянный максимальный размер, то параметр dwBytes не должен превышать Ox0007FFF8. |
||||||||||||||
Возвращаемое значение |
LPVOID. В случае успешного выполнения, возвращаемое значение — указатель на распределенный блок памяти. Возвращаемое значение — NULL, если попытка распределения потерпела неудачу из-за недостатка доступной памяти или повреждения кучи. Если функция терпит неудачу и был указан флажок HEAP_GENERATE_EXCEPTIONS, могут быть выработаны значения исключений, перечисленные в табл. 11.7. |
||||||||||||||
Таблица 11.7. Исключения, связанные с возникновением ошибок при выполнении функции HeapAlloc |
|||||||||||||||
Значение |
Описание |
||||||||||||||
STATUS_ACCESS_VIOLATION |
Во время выполнения попытки распределения произошло нарушение правил доступа. |
||||||||||||||
STATUS_NO_MEMORY |
Попытка распределения была неудачной из-за недостатка доступной памяти. |
||||||||||||||
Включаемыйфайл |
winbase.h |
||||||||||||||
См. также |
GetProcessHeap, HeapCreate, HeapDestroy, HeapFree, HeapReAlloc, HeapSize, HeapCompact |
||||||||||||||
Пример |
В следующем примере во время запуска приложения создается куча с помощью функции HeapCreate. Затем память распределяется и используется в качестве динамического массива строк. Когда пользователь выбирает пункт меню Allocate!, из кучи распределяется память для хранения новой строки и к массиву добавляется указатель на эту память. Если в массиве не остается места, применяется функция HeapReAlloc для расширения массива. Когда пользователь выбирает пункт меню Free!, освобождается последняя распределенная строка. После того как освобождается достаточно строк для того, чтобы остался значительный объем неиспользуемого пространства, массив перераспределяется в целях его сжатия. При каждом перераспределении массива куча уплотняется с помощью функции HeapCompact. |
||||||||||||||
См. \local-sources\chapll\ll-04.txt |
|||||||||||||||
MapUserPhysicalPages • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция MapUserPhysicalPages отображает страницы распределенной физической памяти в указанные адреса, которые принадлежат к виртуальным адресам AWE. |
||||||||||||||
Синтаксис |
BOOL MapUserPhysicalPages( PVOID IpAddress, ULONG_PTR pNumberOfPages, PULONG_PTR pUserPfnArray ) |
||||||||||||||
Параметры IpAddress |
PVOID. Указатель на начальный адрес области памяти, для которой должно быть выполнено повторное отображение. Значение этого параметра должно находиться в пределах диапазона адресов, возвращенных функцией VirtualAlloc при распределении области AWE. |
||||||||||||||
р Number OfPagei |
rULONG_PTR. Указывает размер в страницах физической памяти, для которой должно быть выполнено преобразование. Диапазон виртуальных адресов является непрерывным, начиная с IpAddress. |
||||||||||||||
р User PfnAr ray |
PULONG_PTR Адрес массива номеров физических страничных блоков. Эти страничные блоки будут отображены параметром IpAddress после возврата из функции. Если в качестве этого параметра применяется значение NULL, указанный диапазон адресов не будет отображен. |
||||||||||||||
Возвращаемое значение |
BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE. Для выборки расширенных данных об ошибке применяется функция GetLastError. |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
MapUserPhysicalPagesScatter, AllocateUserPhysicalPages |
||||||||||||||
MapUserPhysicalPagesScatter + Windows 98 * Windows 2000 |
|||||||||||||||
Описание |
Функция MapUserPhysicalPagesScatter отображает страницы распределенной физической памяти, которые принадлежат к виртуальным адресам AWE. В отличие от MapUserPhysicalPages, функция MapUserPhysicalPagesScatter позволяет отображать и отменять отображение нескольких областей. |
||||||||||||||
Синтаксис |
BOOL MapUserPhysicalPagesScatter( PVOID* IpVirtualAddresses, ULONG_PTR p Number Of Pages, PULONG_PTR pUserPfnArray ) |
||||||||||||||
Параметры Ip VirtualAddresses |
PVOID*. Указатель на массив начальных адресов областей памяти, для которых должно быть выполнено повторное отображение. Каждый вход должен находиться в пределах диапазона адресов, возвращенных функцией VirtualAHoc при распределении области AWE. Значение, приведенное в качестве параметра р Number Of Pages, указывает размер массива. |
||||||||||||||
рNumberOfPages |
ULONG_PTR. Указывает размер в страницах физической памяти, для которой должно быть выполнено преобразование. Диапазон виртуальных адресов указан массивом IpVirtualAddresses. |
||||||||||||||
pUserPfnArray |
PULONG_PTR. Адрес массива номеров физических страничных блоков. Эти страничные блоки будут отображены параметром IpAddress после возврата из этой функции. Если в качестве этого параметра применяется значение NULL, указанный диапазон адресов не будет отображен. |
||||||||||||||
Возвращаемое значение |
BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE. Для выборки расширенных данных об ошибке применяется функция GetLastError. |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
MapUserPhysicalPages, AllocateUserPhysicalPages |
||||||||||||||
HeapCompact • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция HeapCompact пытается уплотнить указанную кучу. Она уплот няет кучу, сливая смежные свободные блоки памяти и отменяя выделе ние больших свободных блоков памяти. Нет гарантии, что приложени сможет успешно распределить блок памяти с размером, возвращенным функцией HeapCompact. Такому распределению могут воспрепятствовать другие нити или установленный порог выделения. |
||||||||||||||
Синтаксис |
UINT HeapCompact( HANDLE hHeap, DWORD dwFlags ) |
||||||||||||||
Параметры hHeap |
HANDLE. Дескриптор кучи, которую будет пытаться уплотнить эта функция. |
||||||||||||||
dwFlags |
DWORD. Должен быть установлен равным HEAP_NO_SERIALIZE, если необходимо исключить сериализацию (преобразование в последовательную форму) доступа к куче на время обращения к ней функции. Если этот |
||||||||||||||
параметр установлен в 0, в процессе уплотнения кучи происходит сериа-лизация доступа к ней. Это — безопасное и простое условие, заданное по умолчанию. |
|||||||||||||||
Возвращаемое значение |
UINT. В случае успешного выполнения возвращаемое значение представляет собой размер в байтах самого большого выделенного свободного блока в куче; в ином случае возвращаемое значение равно 0. Для выборки расширенных данных об ошибке применяется функция GetLastError. |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
HeapCreate |
||||||||||||||
Пример |
См. пример для функции HeapAlloc. |
||||||||||||||
HeapCreate • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция HeapCreate создает объект кучи, который является приватным для вызывающего процесса. Эта функция резервирует непрерывный блок памяти в виртуальном адресном пространстве процесса и распределяет физическую память для начальной части этого блока. Функция HeapCreate применяется для создания приватной кучи для нити, в которой эта нить может эффективно распределять память вместо использования глобальной кучи. |
||||||||||||||
Синтаксис |
HANDLE HeapCreate( DWORD dwOptions, DWORD dwInitialSize, DWORD dwMaximumSize ) |
||||||||||||||
Параметры dw Options |
DWORD. Необязательные атрибуты для новой кучи. Эти опции воздействуют на последующий доступ к новой куче путем вызова функций кучи (HeapAlloc, HeapFree, HeapReAlloc и HeapSize). В качестве этого параметра можно указать один или несколько флажков, перечисленных в табл. 11.8. |
||||||||||||||
Таблица 11.8. Значения параметра dwOptions функции HeapCreate |
|||||||||||||||
Флажок |
Описание |
||||||||||||||
HEAP _GENERATE_EXCEPT1ONS |
В качестве указания на ошибку активизирует исключение, вместо возврата значения NULL. |
||||||||||||||
HEAP_NO_SERIALIZE |
Взаимоисключающая блокировка не будет применяться в то время, как функции кучи распределяют и освобождают память из этой кучи. Если этот параметр не указан, происходит сериализация доступа к куче. Сериализация доступа к куче позволяет двум или более нитям одновременно распределять и освобождать память в одной и той же куче. |
||||||||||||||
dwInitialSize |
DWORD. Начальный размер кучи в байтах. Этот параметр определяет начальный объем физической памяти, которая распределена для кучи, округленный в большую сторону до границы следующей страницы. Для определения размеров страницы на хост-компьютере применяется функция GetSystemlnfo. |
||||||||||||||
dwMaximumSize |
DWORD. Максимальный размер кучи в байтах. Если в качестве значения этого параметра установлен 0, максимальный размер кучи ограничен только объемом доступной памяти. Если параметр dwMaximumSize отличен от нуля, размер определяется как число байтов, указанное параметром dwMaxi-mumSize, с округлением в большую сторону до границы следующей страницы. Блок такого размера резервируется в виртуальном адресном пространстве процесса.Если куча имеет постоянный максимальный размер, то отдельные запросы на распределение, выполненные с помощью функций HeapAlIoc или HeapReAlloc, не должны превышать Ox7FFF8 байтов; запросы на распределение более крупных блоков завершаются неудачно, даже если максимальный размер кучи достаточно велик для того, чтобы можно быть выделить подобный блок. Если запросы распределения превышают начальный объем физической памяти, указанный параметром dwInitialSize, система распределяет для кучи дополнительные страницы физической памяти, вплоть до максимального размера кучи. |
||||||||||||||
Возвращаемое значение |
HANDLE. Дескриптор вновь созданной кучи. Если возникает ошибка, возвращаемое значение — NULL. |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
HeapFree, HeapAlIoc, HeapReAlloc, HeapDestroy |
||||||||||||||
Пример |
См. пример для функции HeapAlIoc. |
||||||||||||||
HeapDestroy • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция HeapDestroy уничтожает объект кучи. Эта функция отменяет выделение и освобождает все страницы приватного объекта кучи, а также объявляет недействительным ее дескриптор. Вызывать функцию HeapFree перед вызовом функции HeapDestroy нет необходимости. |
||||||||||||||
Синтаксис |
BOOL HeapDestroy( HANDLE hHeap ) |
||||||||||||||
Параметры hHeap |
HANDLE. Дескриптор кучи, которая должна быть уничтожена. Этот параметр должен представлять собой дескриптор, возвращенный функцией HeapCreate. Дескрипторы, возвращенные функцией GetProcessHeap, не должны использоваться. |
||||||||||||||
Возвращаемое значение |
BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE. |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
HeapFree, HeapCreate |
||||||||||||||
Пример |
См. пример для функции HeapAlIoc. |
||||||||||||||
HeapFree • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция HeapFree освобождает блок памяти, распределенный из кучи с помощью функции HeapAlIoc или HeapReAlloc. |
||||||||||||||
Синтаксис |
BOOL HeapFree( HANDLE hHeap, DWORD dwfJags, LPVOID IpMem ) |
||||||||||||||
Параметры hHeap |
HANDLE. Дескриптор кучи, возвращенный функцией HeapCreate или GetProcessHeap. |
||||||||||||||
dwFlags |
DWORD. Если этот параметр установлен равным HEAP_NO_SERIALIZE,сериализация доступа к кучи не выполняется. Это означает, что монопольный доступ не обеспечивается и не должен применяться, если куча разделена между нитями. Определение этого флажка приводит к отмене опций, установленных при создании кучи с помощью функции HeapCreate. |
||||||||||||||
lpMet |
LPVOID. Указатель на блок памяти, которая должна быть освобождена, возвращенный функцией HeapAlIoc или HeapReAlloc. |
||||||||||||||
Возвращаемое значение |
BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE. |
||||||||||||||
Включаемы йфайл |
winbase.h |
||||||||||||||
См. также |
HeapCreate, HeapAlloc, HeapReAlloc, HeapDestroy |
||||||||||||||
Пример |
См. пример для функции HeapAlloc. |
||||||||||||||
HeapReAlloc • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция HeapReAlloc выполняет повторное распределение блока памяти из кучи. Полученный блок памяти не является перемещаемым. |
||||||||||||||
Синтаксис |
LPVOID HeapReAlloc( HANDLE hHeap, DWORD dwFlags, LPVOID IpMem, DWORD dwBytes ) |
||||||||||||||
Параметры hHeap |
HANDLE. Дескриптор кучи, возвращенный функцией HeapCreate или GetProcessHeap. |
||||||||||||||
dwFlags |
DWORD. Определяет способ перераспределения памяти. Флажки, указанные в качестве этого параметра, отменяют соответствующий флажок, указанный при создании кучи с применением функции HeapCreate. В качестве этого параметра можно указать один или несколько флажков, перечисленных в табл. 11.9. |
||||||||||||||
IpMem. |
LPVOID. Указатель на блок памяти, перераспределяемый функцией, который возвращен при предыдущем вызове функции HeapAlloc или HeapReAlloc. |
||||||||||||||
dwBytes |
DWORD. Число байтов, которое должно быть распределено. Если куча, указанная параметром hHeap, имеет постоянный максимальный размер, параметр dwBytes не должен превышать Ox7FFF8. |
||||||||||||||
Возвращаемое значение |
LPVOID. В случае успешного выполнения возвращаемое значение — указатель на перераспределенный блок памяти. Возвращаемое значение — NULL, если попытка распределения неудачна из-за недостатка доступной памяти или повреждения кучи.Если функция терпит неудачу и был указан флажок HEAP_GENERATE_EXCEPTIONS, могут быть выработаны значения исключений, перечисленные в табл. 11.10. |
||||||||||||||
Таблица 11.9. Флажки функции HeapReAlloc |
|||||||||||||||
Флажок |
Описание |
||||||||||||||
HEAP_GENERATE_EXCEPTIONS |
В качестве указания на ошибку активизировать исключение, вместо возврата значения NULL. |
||||||||||||||
HEAP_NO_SERIALIZE |
Взаимоисключающая блокировка не будет применяться в то время, как функция обращается к куче. Если этот флажок указан, к куче должна обращаться в определенный момент времени только одна нить. Если кучу совместно используют несколько нитей, этот флажок не должен быть установлен. |
||||||||||||||
HEAPJREAUOCJN_PLACE_ONLY |
Не должно быть никакого перемещения при перераспределении блока памяти большего размера. Если этот флажок не указан и запрос на перераспределение требует выделения блока памяти большего размера, функция может переместить блок в новое место. Если же этот флажок указан и блок не может быть расширен без перемещения, функция не может быть выполнена. |
||||||||||||||
HEAP_ZERO_MEMORY |
Если происходит расширение блока, инициализировать вновь распределенную память значениями 0. |
||||||||||||||
Таблица 1 1. 10. Исключения, связанные с возникновением ошибок при выполнении функции HeapReAlloc |
|||||||||||||||
Значение |
Описание |
||||||||||||||
STATUS_ACCESS_VIOLATION |
При попытке перераспределения произошло нарушение правил доступа. |
||||||||||||||
STATUS_NO_MEMORY |
Перераспределение не выполнено из-за отсутствия доступной памяти. |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
HeapCreate, HeapAlloc, GetProcessHeap |
||||||||||||||
Пример |
См. пример для функции HeapAlloc. |
||||||||||||||
HeapSize • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция HeapSize возвращает размер в байтах блока памяти, распределенного из кучи с помощью функции HeapAlloc или HeapReAlloc. |
||||||||||||||
Синтаксис |
DWORD HeapSize( HANDLE hHeap, DWORD dwFJags, LPCVOID IpMem ) |
||||||||||||||
Параметры hHeap |
HANDLE. Дескриптор кучи, в которой находится блок памяти. Этот дескриптор должен быть возвращен функцией HeapCreate или GetProcessHeap. |
||||||||||||||
dw Flags |
DWORD. Если этот параметр установлен равным HEAP_NO_SERIALIZE,сериализация доступа к куче не выполняется. Это означает, что монопольный доступ не обеспечивается и не должен применяться, если куча разделена между нитями. Определение этого флажка приводит к отмене опций, установленных при создании кучи с помощью функции HeapCreate. |
||||||||||||||
lp Mem |
LPCVOID. Указатель на блок памяти, для которого должен быть определен размер. Это — указатель, возвращенный функцией HeapAlloc или HeapReAlloc. |
||||||||||||||
Возвращаемое значение DWORD. Размер распределенного блока памяти в байтах. |
|||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
HeapCreate, GetProcessHeap, HeapAlloc, HeapReAlloc |
||||||||||||||
Пример |
В следующем примере создается куча и из нее распределяется блок памяти, когда пользователь выбирает пункт меню Test!. Затем в окне сообщения отображается фактический размер блока памяти. |
||||||||||||||
См. \local-sources\chapll \11-05. txt |
|||||||||||||||
IsBadCodePtr + Windows 98 + Windows 2000 |
|||||||||||||||
Описание |
Функция IsBadCodePtr определяет, имеет ли вызывающий процесс доступ для чтения к памяти по указанному адресу. Эта функция не гарантирует, что доступ для чтения распространяется на ряд адресов памяти. В среде с вытесняющей многозадачностью другие нити могут изменить права доступа процесса к проверяемой памяти. Даже если эта функция покажет, что процесс имеет доступ для чтения, в приложении необходимо применить структурированную обработку исключительных ситуаций, возникающих при попытке обратиться к памяти. |
||||||||||||||
Синтаксис |
BOOL IsBadCodePtr( FARPROC IpfnProc ) |
||||||||||||||
Параметры |
|||||||||||||||
IpfnProc |
FARPROC. Указатель на адрес в памяти. |
||||||||||||||
Возвращаемое значение |
BOOL. FALSE, если вызывающий процесс имеет доступ для чтения к указанной памяти; в ином случае возвращаемое значение — TRUE. |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
IsBadReadPtr, IsBadStringPtr, IsBadWritePtr |
||||||||||||||
Пример |
В следующим примере показано, как вызвать в приложении функцию с минимальным риском выработки сообщения о нарушении защиты. |
||||||||||||||
См. \local-sources\chapll\ll-06.txt |
|||||||||||||||
IsBadReadPtr * Windows 98 * Windows 2000 |
|||||||||||||||
Описание |
Функция IsBadReadPtr проверяет, имеет ли вызывающий процесс доступ для чтения к указанному ряду адресов памяти. Если вызывающий процесс имеет доступ для чтения к некоторым, но не всем адресам этого ряда, возвращаемое значение указывает, что нет доступа для чтения. В среде с вытесняющей многозадачностью другие нити могут изменить права доступа процесса к проверяемой памяти. Даже если эта функция покажет, что процесс имеет доступ для чтения, в приложении необходимо применить структурированную обработку исключительных ситуаций, возникающих при попытке обратиться к памяти. |
||||||||||||||
Синтаксис |
BOOL IsBadReadPtr( CONST VOID* IpvPtr, UINT cbBytes ) |
||||||||||||||
Параметры IpvPtr |
CONST VOID*. Указатель на первый байт блока памяти. |
||||||||||||||
cbBytes |
UINT. Размер блока памяти в байтах. |
||||||||||||||
Возвращаемое значение |
BOOL. FALSE, если вызывающий процесс имеет доступ для чтения ко всем байтам в указанном диапазоне адресов памяти; в ином случае, возвращаемое значение — TRUE. |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
IsBadCodePtr, IsBadStringPtr, IsBadWritePtr |
||||||||||||||
Пример |
См. пример для функции IsBadCodePtr. |
||||||||||||||
IsBadStringPtr • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция IsBadStringPtr проверяет, имеет ли вызывающий процесс доступ для чтения к ряду адресов памяти, на который указывает указатель строки. Если вызывающий процесс имеет доступ для чтения к некоторым, но не всем адресам этого ряда, возвращаемое значение указывает, что нет доступа для чтения.В среде с вытесняющей многозадачностью другие нити могут изменить права доступа процесса к проверяемой памяти. Даже если эта функция покажет, что процесс имеет доступ для чтения, в приложении необходимо применить структурированную обработку исключительных ситуащй, возникающих при попытке обратиться к памяти. |
||||||||||||||
Синтаксис |
BOOL IsBadStringPtr( LPCTSTR IpszStr, UINT cchMax ) |
||||||||||||||
Параметры |
|||||||||||||||
IpszStr |
LPCTSTR. Указатель на строку с нулевым символом в конце, представленную в коде Unicode или ASCII. |
||||||||||||||
cchMax |
UINT. Максимальный размер строки в символах. |
||||||||||||||
Возвращаемое значение |
BOOL. FALSE, если вызывающий процесс имеет доступ для чтения ко всем байтам вплоть до завершающего нулевого символа строки или к числу байтов, указанных параметром cchMax; в ином случае возвращаемое зна- ; чение — TRUE. |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
IsBadCodePtr, IsBadReadPtr, IsBadWritePtr |
||||||||||||||
Пример |
См. пример для функции IsBadCodePtr. |
||||||||||||||
IsBadWritePtr • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция IsBadWritePtr проверяет, имеет ли вызывающий процесс доступ для записи к ряду адресов памяти. Если вызывающий процесс имеет доступ для записи к некоторым, но не всем адресам этого ряда, возвращаемое значение указывает, что нет доступа для записи. В среде с вытесняющей многозадачностью другие нити могут изменить права доступа процесса к проверяемой памяти. Даже если эта функция покажет, что процесс имеет доступ для записи, в приложении необходи-. мо применить структурированную обработку исключительных ситуаций, возникающих при попытке обратиться к памяти. |
||||||||||||||
Синтаксис |
BOOL IsBadWritePtr( LPVOID IpvPtr, UINT cbBytes ) |
||||||||||||||
Параметры |
|||||||||||||||
IpvPtr |
LPVOID. Указатель на первый байт блока памяти. |
||||||||||||||
cbBytes |
UINT. Размер блока памяти в байтах. |
||||||||||||||
Возвращаемое значение |
BOOL. FALSE, если вызывающий процесс имеет доступ для записи ко всем байтам в указанном диапазоне адресов памяти; в ином случае возвращаемое значение — TRUE. |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
IsBadCodePtr, IsBadReadPtr, IsBadStringPtr |
||||||||||||||
Пример |
См. пример для функции IsBadCodePtr. |
||||||||||||||
MoveMemory • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция MoveMemory перемещает блок памяти из одного места в другое. |
||||||||||||||
Синтаксис |
VOID MoveMemory( PVOID pDestination, CONST VOID* pSource, SIZE_T Length ) |
||||||||||||||
Параметры |
|||||||||||||||
рDestination |
PVOID. Указатель на начальный адрес назначения сдвига. |
||||||||||||||
pSource |
CONST VOID*. Указатель на начальный адрес блока памяти, который должен быть перемещен. |
||||||||||||||
Length |
SIZE Т. Указывает размер в байтах блока памяти, который должен быть перемещен. |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
См. также |
FillMemory, CopyMemory, ZeroMemory |
||||||||||||||
MulDiv • Windows 98 • Windows 2000 |
|||||||||||||||
Описание |
Функция MulDiv умножает два 32-разрядных значения (nMultiplicand* nMultiplier), а затем делит 64-разрядный результат на третье 32-разрядное значение (nDivisor). Возвращаемое значение округляется с увеличением или уменьшением до ближайшего целого числа. Функция MulDiv применяется для вычислений, при которых результат умножения может выйти за пределы 32-разрядного представления чисел. |
||||||||||||||
Синтаксис |
int MulDiv( int nMultiplicand, int nMultiplier, int nDivisor ) |
||||||||||||||
Параметры nMultiplicand |
int. Множимое. |
||||||||||||||
nMultiplier |
int. Множитель. |
||||||||||||||
nDivisor |
int. Число, на которое должен быть разделен результат умножения (nMultiplicand* nMultiplier) . |
||||||||||||||
Возвращаемое значение |
int. Результат умножения и деления. Если произошло переполнение или параметр nDivisor был равен 0, возвращаемое значение равно |
||||||||||||||
Включаемый файл |
winbase.h |
||||||||||||||
Пример |
В следующем примере (рис. 11.3) показано вычисление выражения (200000*300000) / 100000. При вычислении с использованием только целых чисел промежуточное значение превысило бы по размерам 32-разрядное представление. Применение функции MulDiv позволяет получ.ить правильный результат. |
||||||||||||||
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.