Динамическое распределение памяти в MS Windows. Габрельян Б.В. - 7 стр.

UptoLike

Составители: 

GlobalFree, LocalFree Освобождает выделенный блок памяти
GlobalHandle, LocalHandle Получает дескриптор выделенного блока памяти
GlobalLock, LocalLock Блокирует выделенный блок памяти
GlobalMemoryStatus Возвращает размеры доступной физ. и вирт. памяти
GlobalRealloc, LocalRealloc Изменяет размер выделенного блока памяти
GlobalSize, LocalSize Возвращает размер выделенного блока памяти
GlobalUnlock, LocalUnlock Отменяет блокировку блока памяти
MoveMemory Перемещает блок памяти
VirtualAlloc Выделяет виртуальную память
VirtualFree Освобождает виртуальную память
ZeroMemory Заполняет блок памяти нулями
В Win16 наиболее часто используются функции:
HGLOBAL GlobalAlloc(UINT uFlags, DWORD dwBytes);
HGLOBAL GlobalRealloc(HGLOBAL hMem, DWORD dwBytes, UINT
uFlags);
HGLOBAL GlobalFree(HGLOBAL hMem);
GlobalAlloc позволяет захватить блок памяти любого типа. Этот тип
задается параметром uFlags. Возможные значения объявлены в виде
символических констант:
GMEM_FIXED - фиксированный блок
GMEM_MOVEABLE - перемещаемый
GMEM_DISCARDABLE - отбрасываемый (только Win16).
Вместе с этими константами может задаваться флаг GMEM_ZEROINIT,
тогда выделенный блок памяти заполняется нулями. Для комбинаций констант
определены свои имена:
GPTR
как GMEM_FIXED | GMEM_ZEROINIT
GHND как GMEM_MOVEABLE | GMEM_ZEROINIT. Остальные
возможные значения см. в файле GlobalAlloc.rtf.
Параметр dwBytes содержит размер запрашиваемого блока в байтах.
Функция возвращает дескриптор для перемещаемого и указатель для
фиксированного блока памяти.
Пример 1.
int *ptr = (int *)GlobalAlloc(GPTR,4096); // Фиксированный, заполненный нулями
// блок, размером 4K
ptr[100] += 10;
GlobalFree(ptr);
int *Ptr = (int *)malloc(4096); // Фиксированный, не инициализированный
блок,
// размером 4K
Ptr[100] = -1;
free(Ptr);
Для работы с перемещаемыми (и отбрасываемыми) блоками нужно
использовать
функции GlobalLock и GlobalUnlock.
GlobalFree, LocalFree         Освобождает выделенный блок памяти
GlobalHandle, LocalHandle     Получает дескриптор выделенного блока памяти
GlobalLock, LocalLock         Блокирует выделенный блок памяти
GlobalMemoryStatus            Возвращает размеры доступной физ. и вирт. памяти
GlobalRealloc, LocalRealloc   Изменяет размер выделенного блока памяти
GlobalSize, LocalSize         Возвращает размер выделенного блока памяти
GlobalUnlock, LocalUnlock     Отменяет блокировку блока памяти
MoveMemory                    Перемещает блок памяти
VirtualAlloc                  Выделяет виртуальную память
VirtualFree                   Освобождает виртуальную память
ZeroMemory                    Заполняет блок памяти нулями

В Win16 наиболее часто используются функции:
       HGLOBAL GlobalAlloc(UINT uFlags, DWORD dwBytes);
       HGLOBAL GlobalRealloc(HGLOBAL hMem, DWORD dwBytes, UINT
uFlags);
       HGLOBAL GlobalFree(HGLOBAL hMem);

       GlobalAlloc позволяет захватить блок памяти любого типа. Этот тип
задается параметром uFlags. Возможные значения объявлены в виде
символических констант:
       GMEM_FIXED - фиксированный блок
       GMEM_MOVEABLE - перемещаемый
       GMEM_DISCARDABLE - отбрасываемый (только Win16).
       Вместе с этими константами может задаваться флаг GMEM_ZEROINIT,
тогда выделенный блок памяти заполняется нулями. Для комбинаций констант
определены свои имена:
       GPTR как GMEM_FIXED | GMEM_ZEROINIT
       GHND как GMEM_MOVEABLE | GMEM_ZEROINIT. Остальные
возможные значения см. в файле GlobalAlloc.rtf.
Параметр dwBytes содержит размер запрашиваемого блока в байтах.
Функция возвращает дескриптор для перемещаемого и указатель для
фиксированного блока памяти.

Пример 1.
int *ptr = (int *)GlobalAlloc(GPTR,4096); // Фиксированный, заполненный нулями
                                            // блок, размером 4K
ptr[100] += 10;
GlobalFree(ptr);
int *Ptr = (int *)malloc(4096);     // Фиксированный, не инициализированный
блок,
                                    // размером 4K
Ptr[100] = -1;
free(Ptr);
        Для работы с перемещаемыми (и отбрасываемыми) блоками нужно
использовать функции GlobalLock и GlobalUnlock.