Every line in the three panels below is copied from an actual compile-and-run of playground.c: clang -g -O0 -o playground playground.c, disassembled with llvm-objdump -d --x86-asm-syntax=intel, then run once to capture real addresses. Nothing here is illustrative.
0x...e830
rbp(function_c) = 0x...e830 — identical, frame genuinely reused
Block A 0x600003c401c0 vs Block B 0x600002b44050 — different malloc zones entirely
Block B ...44050 → Block C ...44060 — same zone, later block is +16 higher