|
Overview |
|
|
|
Group |
|
|
|
Quick Info
Windows NT
| Yes
| Win95
| Yes
| Win32s
| Yes
| Import Library
| kernel32.lib
| Header File
| winbase.h
| Unicode
| No
| Platform Notes
| None
|
|
|
VirtualAlloc
The VirtualAlloc function reserves or commits a region of pages in the virtual address space
of the calling process. Memory allocated by this function is automatically
initialized to zero.
LPVOID VirtualAlloc(
LPVOID lpAddress,
| // address of region to reserve or commit
| DWORD dwSize,
| // size of region
| DWORD flAllocationType,
| // type of allocation
| DWORD flProtect
| // type of access protection
| );
|
|
Parameters
lpAddress
Specifies the desired starting address of the region to allocate. If the
memory is being reserved, the specified address is rounded down to the next
64-kilobyte boundary. If the memory is already reserved and is being committed, the
address is rounded down to the next page boundary. To determine the size of a page
on the host computer, use the GetSystemInfo function. If this parameter is NULL, the system determines where to allocate
the region.
dwSize
Specifies the size, in bytes, of the region. If the lpAddress parameter is NULL, this value is rounded up to the next page boundary.
Otherwise, the allocated pages include all pages containing one or more bytes in the
range from lpAddress to (lpAddress+dwSize). This means that a 2-byte range straddling a page boundary causes both pages
to be included in the allocated region.
flAllocationType
Specifies the type of allocation. You can specify any combination of the
following flags:
Flag
| Meaning
| MEM_COMMIT
| Allocates physical storage in memory or in the paging file on disk for the
specified region of pages.
|
| An attempt to commit an already committed page will not cause the function to
fail. This means that a range of committed or decommitted pages can be
committed without having to worry about a failure.
| MEM_RESERVE
| Reserves a range of the process's virtual address space without allocating any
physical storage. The reserved range cannot be used by any other allocation
operations (the malloc function, the LocalAlloc function, and so on) until it is released. Reserved pages can be committed in
subsequent calls to the VirtualAlloc function.
| MEM_TOP_DOWN
| Allocates memory at the highest possible address.
|
flProtect
Specifies the type of access protection. If the pages are being committed, any
one of the following flags can be specified, along with the PAGE_GUARD and
PAGE_NOCACHE protection modifier flags, as desired:
Flag
| Meaning
| PAGE_READONLY
| Enables read access to the committed region of pages. An attempt to write to
the committed region results in an access violation. If the system
differentiates between read-only access and execute access, an attempt to execute code in
the committed region results in an access violation.
| PAGE_READWRITE
| Enables both read and write access to the committed region of pages.
| PAGE_EXECUTE
| Enables execute access to the committed region of pages. An attempt to read or
write to the committed region results in an access violation.
| PAGE_EXECUTE_READ
| Enables execute and read access to the committed region of pages. An attempt
to write to the committed region results in an access violation.
| PAGE_EXECUTE_READWRITE
| Enables execute, read, and write access to the committed region of pages.
| PAGE_GUARD
| Pages in the region become guard pages. Any attempt to read from or write to a
guard page causes the operating system to raise a STATUS_GUARD_PAGE exception
and turn off the guard page status. Guard pages thus act as a one-shot access
alarm.
The PAGE_GUARD flag is a page protection modifier. An application uses it with
one of the other page protection flags, with one exception: It cannot be used
with PAGE_NOACCESS. When an access attempt leads the operating system to turn
off guard page status, the underlying page protection takes over.
If a guard page exception occurs during a system service, the service
typically returns a failure status indicator.
| PAGE_NOACCESS
| Disables all access to the committed region of pages. An attempt to read from,
write to, or execute in the committed region results in an access violation
exception, called a general protection (GP) fault.
| PAGE_NOCACHE
| Allows no caching of the committed regions of pages. The hardware attributes
for the physical memory should be specified as "no cache." This is not
recommended for general usage. It is useful for device drivers; for example, mapping a
video frame buffer with no caching. This flag is a page protection modifier,
only valid when used with one of the page protections other than PAGE_NOACCESS.
|
Return Values
If the function succeeds, the return value is the base address of the
allocated region of pages.
If the function fails, the return value is NULL. To get extended error
information, call GetLastError.
Remarks
VirtualAlloc can perform the following operations:
- Commit a region of pages reserved by a previous call to the VirtualAlloc function.
- Reserve a region of free pages.
- Reserve and commit a region of free pages.
You can use VirtualAlloc to reserve a block of pages and then make additional calls to VirtualAlloc to commit individual pages from the reserved block. This enables a process to
reserve a range of its virtual address space without consuming physical
storage until it is needed.
Each page in the process's virtual address space is in one of three states:
State
| Meaning
| Free
| The page is not committed or reserved and is not accessible to the process. VirtualAlloc can reserve, or simultaneously reserve and commit, a free page.
| Reserved
| The range of addresses cannot be used by other allocation functions, but the
page is not accessible and has no physical storage associated with it. VirtualAlloc can commit a reserved page, but it cannot reserve it a second time. The VirtualFree function can release a reserved page, making it a free page.
| Committed
| Physical storage is allocated for the page, and access is controlled by a
protection code. The system initializes and loads each committed page into physical
memory only at the first attempt to read or write to that page. When the
process terminates, the system releases the storage for committed pages. VirtualAlloc can commit an already committed page. This means that you can commit a range
of pages, regardless of whether they have already been committed, and the
function will not fail. VirtualFree can decommit a committed page, releasing the page's storage, or it can
simultaneously decommit and release a committed page.
|
If the lpAddress parameter is not NULL, the function uses the lpAddress and dwSize parameters to compute the region of pages to be allocated. The current state
of the entire range of pages must be compatible with the type of allocation
specified by the flAllocationType parameter. Otherwise, the function fails and none of the pages are allocated.
This compatibility requirement does not preclude committing an already
committed page; see the preceding list.
The PAGE_GUARD protection modifier flag establishes guard pages. Guard pages
act as one-shot access alarms. See Guard Pages.
See Also
GlobalAlloc, HeapAlloc, VirtualFree, VirtualLock, VirtualProtect, VirtualQuery
| 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 without manual coding. Full C# source codes are available 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 » |
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
|