Please enable JavaScript to view this site.

Memory Validator Help

The Locations tab summarises all the allocations in the target program by their allocation location, as opposed to by type.

 

interactiveClick a part of the image below to jump straight to the help for that area.

 

The left hand side of the view shows controls and a variety of statistics:

 

locations-tab-with-menu

 

 The right hand side of the view shows information about generations and event sequence id:

 

 

locations-tab-activity

 

The view lists of all the objects in the program in allocation location order with the numbers of each allocated as well as other information.

 

note The features here are roughly a subset of those on the Types tab. If you're going through this help and already read the about the Types tab, you could skip this topic and go on to the Timeline tab if you wish.

 

 

Colours used in the display

 

Each row is coloured according to whether the object has:

 

objects-colours-red  an increasing count for the number of live objects of the size

objects-colours-blue  a decreasing count

objects-colours-gray  a static count

objects-colours-white  a zero count - i.e. where all allocated objects of the size have been freed

 

The importance of each value within the column is highlighted with a percentage bar:

 

objects-colours-dkgreen  the object size with the maximum value in a given column (not shown for all columns)

objects-colours-green  relative contribution of the value in each column

 

seeAlsoSee also the Data Highlighting settings dialog to customise the first two colours.

 

 

The locations data columns

 

The data in each column for all types of allocation are summarised below:

 

Some of the header columns display a total for the column underneath the column name.

 

Function

Count

Size

Delta

Max

Cumulative

%Size

%Objects

Total

Cum Total

Gen 1

Add Gen

Del Gen

Seq 1

Add Seq

Del Seq

Cur Seq

Activity

allocation location  

number of live allocations of each size

size of the allocations made at this location

change in count since last refresh

maximum number of live allocations

cumulative number of allocations

percentage of all allocations by total size

percentage of all allocations by object count

running (live) total size (Size x Count)

cumulative total size (Size x Cumulative)

first generation allocated

recent generation allocated

recent generation deallocated (or garbage collected)

sequence id of first allocation of this size

id of most recent allocation

id of most recent deallocation

id of most recent allocation or deallocation

the span between first and most recent event sequence ids

 

 

Function

 

The function in which the memory was allocated for this allocation location.

 

 

Size

 

The size is simply that of the allocated memory. Many different types of objects may have the same size, especially the smaller sizes.

 

When a size cannot be determined, a size of -1 may be used:

 

Zero is a valid allocation size, for example new char[0] or SysAllocString(L"").

 

 

Count, Max and Cumulative

 

Count instructionStep the number of live objects for each allocation location, so in our example the count for objects of size 10 increases and decreases, resulting in an overall increase of 1

 

Max instructionStep the maximum value that the count ever reaches - i.e. the peak number of live objects for each allocation location at any one time

 

Cumulative instructionStep increases with every single allocation, giving a historical total

 

 

Total and Cumulative Total

 

Total instructionStep the running total gives the total size of all live objects of each allocation location. This is simply Size * Count

 

C Total instructionStep the cumulative total tells you how much for each allocation location has ever been allocated. This is Size * Cumulative

 

 

Generation numbers, Gen 1, Add Gen, Del Gen

 

The generation numbers show significant generation ids relating to each allocation location.

 

Seq 1 instructionStep the generation for the first allocation at this location

 

Add Seq instructionStep the generation for the most recent allocation at this location  
 

Del Seq instructionStep the generation for the most recent deallocation of memory allocated at this location  

 

If no objects have ever been deleted for a given location, the value just shows a hyphen

 

Looking at the values for the range Gen 1 to Del Gen helps give an indication of the span of activity of each allocation location.

 

 

Sequence numbers: Seq 1, Add Seq, Del Seq and Cur Seq

 

The sequence numbers show significant event sequence ids relating to each allocation location:

 

Seq 1 instructionStep the first allocation sequence id for each allocation location

 

Add Seq instructionStep the sequence id for the most recent allocation
 

Del Seq instructionStep the sequence id for the most recent deallocation

 

If no objects of a given size have ever been deleted, the value just shows a hyphen

 

Cur Seq instructionStep the most recent event sequence id related to each allocation location - usually the greater of Add Seq or Del Seq

 

Looking at the values for the range Seq 1 to Cur Seq helps give an indication of the span of activity of each size of object.

 

 

Event sequence id markers

 

The four sequence id columns show markers visualizing the event's position relative to the the total number of events so far.

 

Each row shows green markers denoting the relative position of the first and most recent sequence ids for the objects of each allocation location.

 

In the following example there have been over 19 million events:

 

objects-tab-seq-markers

 

These markers can help you see the relative timing and order of object size allocation and deallocation much more quickly than scanning through the numbers alone.

 

 

Allocation location activity

 

The 'activity' of an allocation location is the span between its first allocation id and the most recent event sequence id at which at least one object of that size was still live.

 

The Activity column in the view shows a graph of that lifespan, with the value being the number of events spanned:

 

seeAlsoSee also, explanatory examples of the graphs in the Types view.

 

objects-tab-activity

 

 

Sorting columns

 

Sorted columns are highlighted yellow. Just click on the column header to change the sorting column or it's sort direction order.

 

 

Locations tab options

 

The following options are available:

 
locations-common-options

 

 

Updating the display

 

Update Interval (s) instructionStep automatically updates the display at your choice of interval between 0.1 and 60 seconds - or never!

 

Refresh instructionStep updates the display - as does the refresh button on the Tools menu and toolbar

 

With an update interval set to Never, you'll need to use this Refresh button to update the display.

 

 

Allocator

 

Allocator instructionStep updates the display to show types allocated by the specified allocator

 

The allocator can be one of the values in this table. The default is All.

 

All

All types

All Native Memory

All native memory types

All Native Handles

All native handle types

All .Net

All .Net types



CRT

All types from CRT allocations

HeapAlloc

All types from HeapAlloc allocations

LocalAlloc

All types from LocalAlloc allocations

GlobalAlloc

All types from GlobalAlloc allocations

SysAllocString

All types from SysAllocString allocations

CoTaskMemAlloc

All types from CoTaskMemAlloc allocations

IMalloc

All types from allocations tracked by IMalloc

NetAPI

All types from NetAPI allocations

Misc

All types from Misc allocations

VirtualAlloc

All types from VirtualAlloc allocations

VirtualAllocEx

All types from VirtualAllocEx allocations

VirtualAllocVlm

All types from VirtualAllocVlm allocations



User Defined (API)

All types from allocations reported by the User Defined Types API

Custom Hook

All types from allocations tracked by the Custom Hooks settings

COM

All types from COM allocations

Com AddRef

All types from COM AddRef tracking



OpenGL

All types from OpenGL allocations

Crypt

All types from Crypt API allocations



Handles

All types from handles not represented by other allocators in this list

GDI Handles

All types from GDI handle allocations

USER32 Handles

All types from USER32 handle allocations

Internet Handles

All types from internet related allocations (socket, WinHttp...)

Printer Handles

All types from WinSpool allocations



Fortran

All types from Fortran allocations

Delphi

All types from Delphi allocations



.Net Objects

All types from .Net objects

.Net Large Objects

All types from .Net large objects (>= 85,000 bytes in size)

.Net Handles

All types from .Net handles

.Net VTables

All types from .Net VTables

 

 

Filter settings

 

Filter... instructionStep shows the Location Filters settings dialog to edit the filters.

 

 

Locations view popup menuright_mouse_button

 

The following popup menu provides options for filtering and examining data in more detail.

 

locations-menu

 

 

right_mouse_buttonMenu option: Paths to Root, Paths from Root

 

The following options are only active for .Net allocation locations. These options are disabled for native allocation locations.

 

Paths to Root instructionStep For all live objects allocated at this location displays all the paths from the object to the most recent heap dump roots.

 

Paths from Root instructionStep For all live objects allocated at this location displays all the paths most recent heap dump roots to the live objects.

 

 

right_mouse_buttonMenu option: Filter by Function, Filter by Size

 

The following options allow you to remove data from the display using filters.

 

Filter by Function instructionStep creates a filter with the selected allocation location function.
 

Filter by Size instructionStep creates a filter with the selected allocation location size.

 

By default filters prevent data from being displayed. You can change this using the Location Filters.

 

Filters can be edited using the Filter... button to display the Location Filters.

 

 

right_mouse_buttonMenu option: Showing locations - drilling down into the data

 

The following option opens the Analysis Tab, adding a callstack for every allocation or deallocation of the selected object size.

 

This enables a deeper inspection of where and how objects of this size are allocated or freed.

 

Show Allocation Locations instructionStep shows allocations only
 

For example, showing allocations for the following row in the Locations tab will show the callstacks for four allocations of 6000 bytes in the Analysis tab below:

 

locations-show-locations-search-data

 

locations-show-in-analysis