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.
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database