Skip to content
Free public beta until December 4, 2026: every course is open, no card needed. After that, the first chapter of each course stays free and full access is a one-time $39 ($19 for up to 100 founding members chosen for helpful feedback). Your progress is kept. How the beta works

Concept clusters

Related ideas that live chapters apart, pulled onto one page — every way to own memory, every container and when to pick it, and more.

Every way to get a constant into a register

A small immediate, a zeroing idiom, movabs or movz/movk or lui/addi for a big number, a PC-relative address, a GOT load, or a load from read-only data. The size of the value and what it is decide.

17 concepts →

Every way to branch or choose a value

Compare and branch, compare-and-branch in one instruction, cmov/csel/setcc without branching, a jump table for a switch, and lane masks and blends inside SIMD. Predictability and the number of cases decide.

15 concepts →

Every way values travel into and out of a call

Argument registers by convention, the stack for the overflow, floating-point registers, a hidden pointer for a big struct, this in the first argument register, system-call registers, and inline-asm constraints. The ABI and the value's type decide.

15 concepts →

Every way to make an update atomic

A lock-prefixed read-modify-write, an exchange, fetch-and-add, compare-and-swap, an LL/SC loop or an LSE atomic, a CAS retry loop, or a lock. How much the update does decides.

15 concepts →

Every way to order memory between threads

What x86-TSO already promises, full fences (mfence, dmb ish, fence rw,rw), lighter one-way fences, release stores and acquire loads, locked instructions, and the C++ memory orders that pick among them.

13 concepts →

Every way a program can crash

A bad address, a stack overflow, a misaligned access, a divide by zero, a bad instruction, a breakpoint or trap, and a library's deliberate abort(), each with the signal or exception it produces on Linux, macOS and Windows.

17 concepts →

Every way to make code faster at the memory level

Walk memory in order, use every byte of each line, keep the working set small enough to fit, let the prefetcher help, stop threads fighting over lines, cover more memory per TLB entry, and keep data near its core. The kind of miss decides.

17 concepts →

Every protection against memory-safety bugs

Stack canaries, non-executable memory, ASLR and PIE, control-flow protection, guard pages, sanitizers and hardened libraries, and memory-safe languages: what each one stops, and what gets past it.

15 concepts →