Memory Information

Updated: April 19, 2023

The Memory Information view gives an overview about the memory allocation pattern for a process. Specifically, it displays a memory distribution map and information about each segment.

Leaving this view open lets you monitor a process's memory usage, even when running the debugger. It's also good for spotting excessive memory usage so you can begin optimizing the heap or the stack.

Screenshot of Memory Information view showing a distribution map of process memory, a bar graph representing a single heap segment, and a table with details about all memory segments
At the top, the Process Map bar illustrates the breakdown of memory by type. The type reflects the memory's purpose (e.g., code, static data, or shared data). This bar graph is scaled so that large areas don't visually overwhelm small areas, with large areas compressed and marked with a jagged line. Meanwhile, the numbers in the top left and right corners represent the process's start and end addresses in virtual memory, which are always 0 and 0xFFFFFFFF. The memory types are color-coded as follows:
  • Stack (red) — light red for the guard page, medium red for unallocated memory, dark red for allocated memory
  • Program (blue) — dark blue for code (text), light blue for data
  • Heap (purple) — purple for all regions, including guard pages
  • Objects (cyan) — cyan for shared heap objects with certain memory flags
  • Library (green) — dark green for code, light green for data

Just below, another bar shows the breakdown of the segment selected in the table further below. This second bar graph also uses color shade variations for different segment regions (e.g., guard pages versus allocated memory). Note that it's not scaled, meaning no compression of large areas is done. To navigate the entire bar display, use the scrollbar underneath. Here, the numbers in the corners indicate the virtual address range of the segment.

The main portion of the view contains a table with details about each memory segment. The following details are given:
Name
Descriptive name of the segment
Virtual Address
Virtual start address of the segment
Size
Size of the segment. For major categories, this column lists the totals for the minor categories.
Map Flags
Flags and protection bits enabled for the segment. For more information, see the flags and prot arguments for the mmap() function.
Offset
The segment's offset into shared memory, which is equal to the off argument for mmap().

When you click a table row, the corresponding segment is outlined in both bar graphs at the top. By default, the segments are categorized by type, but you can display them in a flat list by deselecting Categorize in the dropdown in the upper right corner of the view. There's also an option for copying the table contents to the clipboard, so you can take a snapshot of memory distribution details.

How memory types relate to virtual memory categories

The relation of memory types to virtual memory (VM) categories is as follows:
VM category Memory type Notes
Code Program  
Shared Code Library Each shared library has its own code segment (and hence, table entry).
Data Program  
Stack Stack Each thread in the application and shared library code has its own stack.
Heap Heap All heap segments for the application and shared libraries.
Shared Heap Objects