1. Introduction
Program analysis tools are critical for understanding program behavior. Software developers need such tools to analyze their programs and identify performance bottlenecks [33]. Profiling is one approach for program analysis. Examples of program profiling include time and space profiling, collecting runtime statistics on instruction and function usage, and function call tracing. Profilers instrument programs to collect the required profiling information.