From source to machine code
Your code becomes data flow, instructions, and a contract with the runtime.
The hardware executes the emitted instructions, not the story your source code tells.
A representation for transformations.
Follow an instruction
Overlap improves throughput. Dependencies introduce bubbles unless the implementation can forward or do independent work.
What this model includes
Five-stage, single-issue teaching model. Dependent mode inserts two idle issue cycles per instruction; real forwarding and hazards vary.
What happens inside
Lower and optimize
A compiler parses source, forms intermediate representations, performs legal transformations, selects instructions, allocates registers, and emits machine code. Inlining can reveal constants and data flow. Aliasing and side effects restrict reordering. Undefined behavior in a language can invalidate the assumptions behind a seemingly obvious experiment.
Load or specialize at runtime
The linker resolves symbols and builds a binary; the loader maps it into a process. A JIT compiler generates code while the program runs, often specializing on observed types. Garbage collection, deoptimization, bounds checks, and warm-up can change performance without any hardware change.
What this means for your code
Low-level engineer
Inspect disassembly and debug information. A microbenchmark must prevent dead-code elimination and document compiler flags and target features.
Software developer
Separate cold start from steady state. A benchmark of one small function may measure JIT warm-up or garbage collection rather than the intended work.
Read the actual specifications
These references supply the underlying contracts and implementation details. The diagrams here are simplified teaching models.