System Memory Management

This section provides detailed documentation on the Windows API functions used for managing memory. Understanding these functions is crucial for developing efficient and stable applications that handle memory allocation, access, and deallocation correctly.

Memory Allocation Functions

These functions are used to request memory blocks from the system's available memory pool.

VirtualAlloc

Description: Reserves or commits a region of pages in the virtual address space of the calling process. This is the primary function for flexible memory allocation.

Syntax:

LPVOID VirtualAlloc(
  LPVOID lpAddress,
  SIZE_T dwSize,
  DWORD  flAllocationType,
  DWORD  flProtect
);

Parameters:

Name Type Description
lpAddress LPVOID The starting address of the region of pages to be allocated. If NULL, the system determines where to allocate the region.
dwSize SIZE_T The size, in bytes, of the region of pages to be allocated.
flAllocationType DWORD The type of memory allocation. Can be MEM_COMMIT, MEM_RESERVE, or a combination.
flProtect DWORD The memory protection for the region of pages. Can be PAGE_READWRITE, PAGE_EXECUTE_READWRITE, etc.

Return Value: If the function succeeds, the return value is a pointer to the allocated region of pages. If the function fails, the return value is NULL.

HeapAlloc

Description: Allocates a block of memory from a specified heap. This function is generally faster for frequent allocations than VirtualAlloc.

Syntax:

LPVOID HeapAlloc(
  HANDLE hHeap,
  DWORD  flOptions,
  SIZE_T dwBytes
);

Parameters:

Name Type Description
hHeap HANDLE A handle to the heap. This handle is returned by the HeapCreate function.
flOptions DWORD Heap allocation options. Can be HEAP_ZERO_MEMORY.
dwBytes SIZE_T The number of bytes to allocate.

Return Value: If the function succeeds, it returns a pointer to the allocated memory. If the function fails, it returns NULL.

Memory Deallocation Functions

These functions are used to release memory previously allocated by the system.

VirtualFree

Description: Releases, decommits, or both pages in the calling process's virtual address space. It can also decommit and release memory pages.

Syntax:

BOOL VirtualFree(
  LPVOID lpAddress,
  SIZE_T dwSize,
  DWORD  dwFreeType
);

Parameters:

Name Type Description
lpAddress LPVOID A pointer to the starting address of the region of pages to be freed. This address must be the base address returned by VirtualAlloc or a base address followed by an offset.
dwSize SIZE_T The size, in bytes, of the region of pages to be freed. This parameter is ignored if dwFreeType is MEM_RELEASE.
dwFreeType DWORD The type of memory freeing operation. Can be MEM_DECOMMIT or MEM_RELEASE.

Return Value: If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.

HeapFree

Description: Frees a memory block previously allocated by a call to the HeapAlloc or HeapReAlloc function. The memory block must be from the heap specified by the hHeap parameter.

Syntax:

BOOL HeapFree(
  HANDLE hHeap,
  DWORD  flOptions,
  LPVOID lpMem
);

Parameters:

Name Type Description
hHeap HANDLE A handle to the heap. This handle is returned by the HeapCreate function.
flOptions DWORD Heap freeing options. Must be 0.
lpMem LPVOID A pointer to the memory block to be freed. This pointer is returned by HeapAlloc or HeapReAlloc.

Return Value: If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.

Memory Information Functions

These functions retrieve information about the memory usage of a process.

GlobalMemoryStatusEx

Description: Fills a MEMORYSTATUSEX structure with information about the current memory usage of the computer. This includes information about physical memory, virtual memory, and page file usage.

Syntax:

BOOL GlobalMemoryStatusEx(
  LPMEMORYSTATUSEX lpBuffer
);

Parameters:

Name Type Description
lpBuffer LPMEMORYSTATUSEX A pointer to a MEMORYSTATUSEX structure that receives information about the current memory status.

Return Value: If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.

Security Note

Improper memory management can lead to security vulnerabilities such as buffer overflows and use-after-free errors. Always validate input sizes and ensure memory is properly deallocated to prevent these issues.

◀ Previous: Threads Next: File I/O ◆