Code analyzers lay at the boundary of program analysis and microarchitectural
knowledge. In order to understand their internal models, and how they derive
performance metrics from them, notions on both of those worlds are needed.

This first chapter aims to lay the foundations for this manuscript. To this
end, we first go over a coarse-grained view of the microarchitectural details
of the parts of a modern processor relevant to our works. We then introduce
notions and metrics on program analysis that will be used throughout this
thesis. Finally, we summarize the current state of the art in the field of code
analyzers, and relevant neighbouring topics.
