На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Global and Local Functions



A process can use the GlobalAlloc and LocalAlloc functions to allocate memory. In the linear 32-bit environment of the Win32 API, the local heap and the global heap are not distinguished. As a result, there is no difference between the memory objects allocated by these functions.

Memory objects allocated by GlobalAlloc and LocalAlloc are in private, committed pages with read-write access. Private memory cannot be accessed by other processes. Memory allocated by using GlobalAlloc with the GMEM_DDESHARE flag is not actually shared globally as it is in Windows version 3. x. However, this flag is available for compatibility purposes and can be used by some applications to enhance the performance of dynamic data exchange (DDE) operations. Applications requiring shared memory for other purposes must use file-mapping objects. Multiple processes can map a view of the same file-mapping object to provide named shared memory. For more information about file mapping, see File Mapping and Shared Memory.

By using GlobalAlloc and LocalAlloc, you can allocate a block of memory of any size that can be represented by 32 bits. You are limited only by the available physical memory, including storage in the paging file on disk. These functions, along with the other global and local functions that manipulate global and local memory objects, are included in the Win32 API for compatibility with 16-bit versions of Windows. However, the change from a 16-bit segmented memory model to a 32-bit virtual memory model has made some of the functions and their options unnecessary or meaningless. For example, there are no longer near and far pointers, because both local and global allocations return 32-bit virtual addresses.

Both GlobalAlloc and LocalAlloc can allocate fixed or movable memory objects. Movable objects can also be marked as discardable. In earlier versions of Windows, movable memory objects were important for memory management. They enabled the system to compact the heap when necessary to make space available for other memory allocations. By using virtual memory, the system is able to manage memory by moving pages of physical memory without affecting the virtual addresses of the processes using the pages. When the system moves a page of physical memory, it simply maps the process's virtual page to the new location of the physical page. Movable memory is still useful for allocating discardable memory. When the system needs additional physical storage, it can use a "least recently used" algorithm to free discardable memory that is not locked. Discardable memory should be used for data that is needed infrequently and can be regenerated easily.

When allocating a fixed memory object, GlobalAlloc and LocalAlloc return a 32-bit pointer that the calling process can immediately use to access the memory. For movable memory, the return value is a handle. To get a pointer to a movable memory object, the calling process uses the GlobalLock and LocalLock functions. These functions lock the memory so that it cannot be moved or discarded. The internal data structures for each memory object include a lock count that is initially zero. For movable memory objects, GlobalLock and LocalLock increment the count by one, and the GlobalUnlock and LocalUnlock functions decrement the count by one. Locked memory is not moved or discarded, unless the memory object is reallocated by using the GlobalReAlloc or LocalReAlloc function. The memory block of a locked memory object remains locked in memory until its lock count is decreased to zero, at which time it can be moved or discarded.

The actual size of the memory allocated by GlobalAlloc or LocalAlloc can be larger than the requested size. To determine the actual number of bytes allocated, use the GlobalSize or LocalSize function. If the amount allocated is greater than the amount requested, the process can use the entire amount.
The GlobalReAlloc and LocalReAlloc functions change the size, in bytes, or the attributes of a memory object allocated by GlobalAlloc and LocalAlloc. The size can increase or decrease.

The GlobalFree and LocalFree functions release memory allocated by GlobalAlloc, LocalAlloc, GlobalReAlloc, or LocalReAlloc.
Other global and local functions include the GlobalDiscard, LocalDiscard, GlobalFlags, LocalFlags, GlobalHandle, and LocalHandle functions. To discard a specified discardable memory object without invalidating the handle, use GlobalDiscard or LocalDiscard. The handle can be used later by GlobalReAlloc or LocalReAlloc to allocate a new block of memory associated with the same handle. To return information about a specified memory object, use GlobalFlags or LocalFlags. The information includes the object's lock count and indicates whether the object is discardable or has already been discarded. To return the handle of the memory object associated with a specified pointer, use GlobalHandle or LocalHandle.


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Глобальные и Локальные Функции



Процесс может использовать GlobalAlloc и функции LocalAlloc, чтобы распределять память. В линейной 32- битовой среде Win32 API, локальная куча и глобальная куча не различены. В результате, нет различия между объектами памяти распределенными этими функциями.

Объекты Памяти распределялись GlobalAlloc и LocalAlloc - на частных, совершенных страницах с чтением-записью доступа. Частная память не может быть доступна другими процессами. Память распределенная использованием GlobalAlloc с флагом GMEM_DDESHARE действительно не распространяется глобально как это - в версии Windows 3. x. Тем не менее, этот флаг доступен для целей совместимости и может быть использовано некоторыми приложениями, чтобы повышать исполнение динамического обмена данных операций (DDE). Приложения, требующие коллективную память для других целей должны использовать файловое распределение объектов. Многочисленные процессы могут отобразить вид того же самого файлового распределения объекта против обеспечивать поименованный распространившее память. Более подробно о файле, отображающем, смотри Файловую Отображающую и Коллективную Память.

Используя GlobalAlloc и LocalAlloc, Вы можете распределить блока памяти любого размера, который может быть представлен 32 битами. Вы ограничиваетесь только доступной физической памятью, включая память в файле подкачки на диске. Эти функции, вместе с другими глобальными и локальными функциями, которые манипулируют глобальными и локальными объектами памяти, включены в Win32 API для совместимости с 16- битовыми версиями Windows. Тем не менее, заменять с 16- бита сегментировавшего модель памяти в 32- битовую виртуальную модель памяти был сделан некоторые функции и их опции необязательные или бессмысленные. Например, нет дольше около и дальних указателей, поскольку как локальные так и глобальные распределения возвращают 32- битовые виртуальные адресы.

Как GlobalAlloc так и LocalAlloc может распределить фиксированные или подвижные объекты памяти. Подвижные объекты могут также выделены как исключаемый. В более ранних версиях Windows, подвижные объекты памяти были важными для управления памяти. Они позволили систему, чтобы уплотнять кучу когда необходимый делать пространством доступным для других распределений памяти. Используя виртуальную память, система способная управлять памятью перемещая страницы физической памяти не влияя на виртуальные адресы процессов, использовавших страницы. Когда система перемещает страницу физической памяти, она просто отображает виртуальную страницу процесса в новую позицию физической страницы. Подвижная память все еще полезная для распределения исключаемой памяти. Когда системе нужно дополнительная физическая память, это может использовать алгоритм "наименее недавно использованный", чтобы освобождать исключаемую память, что не заперт. Исключаемая память должна быть использована для данных, которые - нужно редко и может регенерироваться легко.

При распределении фиксированного объекта памяти, GlobalAlloc и LocalAlloc возвращает 32- битовый указатель, который вызов процесса может немедленно использовать, чтобы иметь доступ к памяти. Для подвижной памяти, обратная величина является ручкой. Чтобы получать указатель на подвижный объект памяти, вызов процесса использует GlobalLock и функции LocalLock. Эти функции запирают память чтобы она не может быть перемещена или отвергнута. Внутренние структуры данных для каждого объекта памяти включают счет блокировки, который первоначально нулевой. Для подвижных объектов памяти, GlobalLock и LocalLock увеличивает счет одним, и GlobalUnlock и декремент функций LocalUnlock счет одним. Закрытая память не перемещена или отвергнута, если объект памяти reallocated использованием GlobalReAlloc или функция LocalReAlloc. Блок памяти объектных остатков закрытой памяти запертой в памяти пока счет блокировки не будет уменьшен в нуль, в котором время может быть перемещено или отвергнуто.

Фактический размер памяти распределялся GlobalAlloc или LocalAlloc может быть большим чем запрошенный размер. Для того, чтобы определять фактическое количество байтов распределенных, используйте GlobalSize или функцию LocalSize. Если размещенная сумма больше, чем сумма запрашивалась, процесс может использовать целую сумму.
GlobalReAlloc И изменение функций LocalReAlloc размер, в байтах, или атрибуты объекта памяти распределялись GlobalAlloc и LocalAlloc. Размер может увеличить или уменьшаться.

GlobalFree И память версии функций LocalFree распределялась GlobalAlloc, LocalAlloc, GlobalReAlloc, или LocalReAlloc.
Другие глобальные и локальные функции включают GlobalDiscard, LocalDiscard, GlobalFlags, LocalFlags, GlobalHandle, и функции LocalHandle. Для того, чтобы отвергать определенный исключаемый объект памяти не аннулируя ручку, используйте GlobalDiscard или LocalDiscard. Ручка может быть использована последующим GlobalReAlloc или LocalReAlloc, чтобы распределять нового блока памяти связанной той же ручкой. Для того, чтобы возвращать информацию об определенном объекте памяти, используйте GlobalFlags или LocalFlags. Информация включает объектный счет блокировки и указывает независимо объект исключаемое или уже отвергнуто. Для того, чтобы возвращать ручку объекта памяти связанной определенным указателем, используйте GlobalHandle или LocalHandle.


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz