Memory Management API Reference
This section provides detailed documentation for Windows APIs related to memory management, including virtual memory, physical memory, heap management, and memory allocation strategies.
Core Concepts
Understanding Windows memory management is crucial for developing efficient and stable applications. Key concepts include:
- Virtual Memory: A memory management technique implemented by the operating system to provide each process with its own private virtual address space.
- Physical Memory: The actual RAM modules installed in the system.
- Heap Management: The process of allocating and deallocating memory blocks from the heap.
- Memory Allocation: Functions used to request and reserve memory.
Key Functions
The Windows API offers a rich set of functions for managing memory. Here are some of the most frequently used:
| Function Name | Description |
|---|---|
VirtualAlloc |
Allocates a region of memory in the virtual address space of the calling process. |
VirtualFree |
Releases, decommits, or releases and decommits an obszar of memory that was previously allocated with VirtualAlloc. |
HeapAlloc |
Allocates a block of memory from the specified heap and returns a pointer to the allocated block. |
HeapFree |
Frees a memory block that was previously allocated from a specified heap by calling the HeapAlloc function. |
GlobalAlloc |
Allocates a fixed or movable memory object of the specified size. |
GlobalFree |
Frees the specified global memory object and invalidates its handle. |
LocalAlloc |
Allocates memory from the local memory allocation framework. |
LocalFree |
Frees the specified local memory object and invalidates its handle. |
CreateFileMapping |
Creates or opens a named or unnamed file mapping object. |
MapViewOfFile |
Maps a view of a file mapping object into the address space of the calling process. |
UnmapViewOfFile |
Unmaps a mapped view of a file from the process's address space. |
Advanced Topics
Memory Mapping
File mapping allows you to map the contents of a file directly into the memory space of a process, enabling efficient file I/O and inter-process communication.
HANDLE hFileMap = CreateFileMapping(
hFile, // Handle to the file
NULL, // Default security attributes
PAGE_READWRITE, // Memory protection
0, // Maximum size high DWORD
0, // Maximum size low DWORD
L"MyFileMappingObject" // Name of the mapping object
);
if (hFileMap == NULL) {
// Handle error
}
LPVOID lpBaseAddress = MapViewOfFile(
hFileMap,
FILE_MAP_WRITE, // Access mode
0, // Offset high DWORD
0, // Offset low DWORD
0 // View size
);
if (lpBaseAddress == NULL) {
// Handle error
CloseHandle(hFileMap);
}
// Use lpBaseAddress to access the mapped file content...
UnmapViewOfFile(lpBaseAddress);
CloseHandle(hFileMap);
Memory Pools and Allocators
For performance-critical applications, consider implementing custom memory allocators or using specialized memory pools to reduce fragmentation and improve allocation speed.
Note on Heap vs. Virtual Memory
While HeapAlloc and HeapFree manage memory within a process's heap, VirtualAlloc and VirtualFree interact directly with the system's page table management, allowing for more granular control over memory regions, protection levels, and sharing.
Best Practices
- Always free memory that you allocate to prevent memory leaks.
- Use the appropriate allocation function for your needs (e.g.,
VirtualAllocfor large, aligned regions;HeapAllocfor general-purpose allocation). - Be mindful of memory alignment requirements for specific data structures.
- Consider memory-mapped files for efficient handling of large files.
- Profile your application's memory usage to identify bottlenecks.