|
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
- 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