Skip to content
Opensource internals
  • Posts

Performance

PostgreSQL Skip Scans B-Tree Indexes: Reading a Non-Leading Column

Jul 22, 2026 33 min read Jay Hubbert

PostgreSQL 18’s skip scan lets an index on (a, b) answer a query on b alone by procedurally generating the possible a values at scan time.

PostgresPerformanceBtreeIndexInternals

Read more →

tmux Stores Grid Cells in Five Bytes

Jul 22, 2026 8 min read Jay Hubbert

tmux splits a grid cell into two representations: a fat 32-byte in-memory form and a packed 5-byte stored form.

TmuxPerformanceInternalsMemory

Read more →

CPython's Cache of Small Integers: 1030 Immortal Objects

May 2, 2026 5 min read Jay Hubbert

Every int from -5 to 1024 is allocated once at startup and marked immortal, so a = 1; b = 1; a is b is True by construction — not by accident of the language.

PythonCpythonInternalsPerformanceIntegers

Read more →

CPython Reuses Objects with Free Lists: Recycling Dead Objects for Free

Mar 14, 2026 7 min read Jay Hubbert

Freelists turn the first word of a dead object into a linked-list pointer, so the next list, tuple, or float pops a ready-made shell instead of hitting the allocator.

PythonCpythonInternalsPerformanceMemory

Read more →

CPython Makes Python Calls Fast with Vectorcall

Mar 2, 2026 6 min read Jay Hubbert

Vectorcall replaces the per-call tuple and dict with a plain C array plus a kwnames tuple, and the ARGUMENTS_OFFSET flag makes bound methods allocation-free.

PythonCpythonInternalsPerformanceCalls

Read more →

← Newer Page 22 of 23 Older →

© 2026 Jay Hubbert · Built with Hugo 0.168.0

RSS ·