Virtual Memory Functions
The Win32 API provides a set of virtual memory functions that enable a process
to manipulate or determine the status of pages in its virtual address space.
Many applications are able to satisfy their memory needs by using the standard
allocation functions (
GlobalAlloc,
LocalAlloc,
malloc, and so on). However, virtual memory functions provide some capabilities not
available to the standard allocation functions. They can perform the following
operations:
- Reserve a range of a process's virtual address space. Reserving address space
does not allocate any physical storage, but it prevents other allocation
operations from using the specified range. It does not affect the virtual address
spaces of other processes. Reserving pages prevents needless consumption of
physical storage, while enabling a process to reserve a range of its address space
into which a dynamic data structure can grow. The process can allocate physical
storage for this space, as needed.
- Commit a range of reserved pages in a process's virtual address space so that
physical storage (either in RAM or on disk) is accessible only to the
allocating process.
- Specify read-write, read-only, or no access for a range of committed pages.
This differs from the standard allocation functions that always allocate pages
with read-write access.
- Free a range of reserved pages, making the range of virtual addresses
available for subsequent allocation operations by the calling process.
- Decommit a range of committed pages, releasing their physical storage and
making it available for subsequent allocation by any process.
- Lock one or more pages of committed memory into physical memory (RAM) so that
the system cannot swap the pages out to the paging file.
- Obtain information about a range of pages in the virtual address space of the
calling process or a specified process.
- Change the access protection for a specified range of committed pages in the
virtual address space of the calling process or a specified process.
The virtual memory functions manipulate pages of memory. The functions use the
size of a page on the current computer to round off specified sizes and
addresses.
To determine the size of a page on the current computer, use the
GetSystemInfo function.
The
VirtualAlloc function performs one of the following operations:
- Reserves one or more free pages.
- Commits one or more reserved pages.
- Reserves and commits one or more free pages.
You can specify the starting address of the pages to be reserved or committed,
or you can allow the system to determine the address. The function rounds the
specified address to the appropriate page boundary. Reserved pages are not
accessible, but committed pages can be allocated with the PAGE_READWRITE,
PAGE_READONLY, or PAGE_NOACCESS flag. When pages are committed, storage is allocated in
the paging file, but each page is initialized and loaded into physical memory
only at the first attempt to read from or write to that page. You can use normal
pointer references to access memory committed by the
VirtualAlloc function.
The
VirtualFree function performs one of the following operations:
- Decommits one or more committed pages, changing the state of the pages to
reserved. Decommitting pages releases the physical storage associated with the
pages, making it available to be allocated by any process. Any block of committed
pages can be decommitted.
- Releases a block of one or more reserved pages, changing the state of the
pages to free. Releasing a block of pages makes the range of reserved addresses
available to be allocated by the process. Reserved pages can be released only by
freeing the entire block that was initially reserved by VirtualAlloc.
- Decommits and releases a block of one or more committed pages simultaneously,
changing the state of the pages to free. The specified block must include the
entire block initially reserved by VirtualAlloc, and all of the pages must be currently committed.
The
VirtualLock function enables a process to lock one or more pages of committed memory into
physical memory (RAM), preventing the system from swapping the pages out to
the paging file. It can be used to ensure that critical data is accessible
without disk access. Locking pages into memory is dangerous because it restricts the
system's ability to manage memory. Excessive use of
VirtualLock can degrade system performance by causing executable code to be swapped out
to the paging file. The
VirtualUnlock function unlocks memory locked by
VirtualLock.
The
VirtualQuery and
VirtualQueryEx functions return information about a region of consecutive pages beginning at
a specified address in the address space of a process.
VirtualQuery returns information about memory in the calling process.
VirtualQueryEx returns information about memory in a specified process and is used to
support debuggers that need information about a process being debugged. The region of
pages is bounded by the specified address rounded down to the nearest page
boundary. It extends through all subsequent pages with the following attributes in
common:
- The state of all pages is the same: either committed, reserved, or free.
- If the initial page is not free, all pages in the region are part of the same
initial allocation of pages that were reserved by a call to VirtualAlloc.
- The access protection of all pages is the same (that is, the PAGE_READONLY,
PAGE_READWRITE, or PAGE_NOACCESS flag).
The
VirtualProtect function enables a process to modify the access protection of any committed
page in the address space of a process. For example, a process can allocate
read-write pages to store sensitive data, and then it can change the access to read
only or no access to protect against accidental overwriting.
VirtualProtect is typically used with pages allocated by
VirtualAlloc, but it also works with pages committed by any of the other allocation
functions. However,
VirtualProtect changes the protection of entire pages, and pointers returned by the other
functions are not necessarily aligned on page boundaries. The
VirtualProtectEx function is similar to
VirtualProtect, except it changes the protection of memory in a specified process. Changing
the protection is useful to debuggers in accessing the memory of a process
being debugged.
- 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