A memory analysis system analyzes memory "events," i.e., the allocation or deallocation of memory locations, associated with the execution of an application program and produces a graphic display associating dynamically allocated memory segments with various program sub-routines. The system communicates with a debugger to trace the memory allocation routines back through the source code version of the application program and produce a call-stack, which lists the various source code sub-routines associated with the allocation of the segment and makes available the applicable lines of the source code. The system assigns to each of these locations a segment type, which relates to a program sub-routine that calls for it. The system includes a kernel processor that replaces calls to memory allocation and deallocation routines in the program with substitute routines that include instructions to notify the kernel processor each time a memory event occurs. The kernel processor monitors the response from the operating system and sends to a main processor included in the system a message that indicates the type event, identifies the memory locations involved and includes related information from the debugger tables which identifies the associated source code sub-routines. The main processor then controls the graphic display of the information. The kernel and the main processors communicate through a section of global memory that is set up as one or more circular queues. The kernel processor suspends the execution of the application program whenever the memory event queue is full, to maintain the application program and the display in relative synchronism.