|
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.
| Last news from Greatis Software |
 |
|
Nostalgia .Net |
|
.Net is powerful, but not all-powerful, so sometimes we need to use Win32 API for our .Net applications. It's simple enough with Platform Invoke if you have Win32 skill, but we do not always have time to dig the ancient documentation, declare the special types that are compatible with Win32, find the values of the Win32's constants and so on. Nostalgia .Net offers several simple-to-use classes, and components that will allow you to forget about the headache of Win32 and just use the power of Win32 in your application the same way as you use the native. Net classes. More » |
| Recommended software for developers |
 |
|
Ultimate Pack |
|
Component pack for Delphi and C++ Builder that contains runtime form designer, runtime object inspector, print suite and much more for the very special price. More » |
 |
|
Form Designer .Net |
|
Unique runtime form design solution that allows to edit any form in .Net WinForms application at runtime with full source codes for only 300 euro! More » |
 |
|
Print Suite .Net |
|
Print Suite .Net is a set of components for easy printing texts, images and grids from your WinForms applications. Full C# source codes are available More » |
 |
|
Gradient Controls .Net |
|
Gradient Controls .Net offers controls with gradient background feature. Labels, panels and so on... Full C# source codes are available More » |
 |
|
Greatis iGrid |
|
iGrid plots drawing grid right over your desktop, so you can use it everywhere, with any drawing application without any special plugins for different graphic editors. More » |
All the contacts and projectsDmitry Vasiliev (just.dmitry)
Related LinksSoftware for Visual Studio .NET developers Software for Delphi and C++ Builder developers Software for Visual Basic 6 developers Delphi Tips&Tricks MegaDetailed.NET More Online Helps Win32 Programmer's Reference Win32 Multimedia Programmer's Reference OLE Programmer's Reference Microsoft Windows Pen API Programmer's Reference Microsoft Windows Sockets 2 Reference Microsoft Windows Telephony API (TAPI) Programmer's Reference Unix Manual Pages
|