Confessions of a Code Addict
I write about how computers work underneath the abstractions: compilers, operating systems, memory, performance, and low-level programming. Click to read Confessions of a Code Addict, by Abhinav Upadhyay, a Substack publication with tens of thousands of subscribers.
OS / kernelPerformance / optimizationCPU / microarchitectureCompilersPython
- Posts
- 127 from 26 Apr 2023 to 2 Oct 2026
- Posting
- monthly (16 in the last year)
- Kind
- personal blog
- Feed
- https://blog.codingconfessions.com/feed
2026 13
- How and Why fork() Uses Copy-on-Write
- How Copy-on-Write Works with Memory-Mapped Files
- Demand Paging in Action: mmap, Page Faults, and RSS
- Demand Paging: What Happens When Linux Handles a Page Fault
- x86 Addressing Modes, Part 2: Indirect, Indexed, and Offset-based Modes
- How Big Is a Physical Address?
- What Does a Page Table Entry Actually Store?
- Page Tables from First Principles
- Understanding a Process’s Address Space Layout
- Why Git Has a Variable Named false_but_the_compiler_does_not_know_it
- How Large Is the Virtual Address Space?
- Why do we need virtual memory?
- Virtual Memory From First Principles
2025 32
- How PyTorch Generates Random Numbers in Parallel on the GPU
- x86 Addressing Modes, Part 1 — Immediate and Direct Access
- A Systems Engineer’s Guide to Benchmarking with RDTSC
- My Top 5 Favourite Features in Python 3.14
- Understanding Weak References in Python
- Compiling Python to Run Anywhere
- What Makes System Calls Expensive
- Leveraging CPU’s Micro-Op Cache for Faster Loops
- Big O vs Hardware: Better Complexity ≠ Better Performance
- x86 Assembly Exercise #1: Toy kill Program (Solution)
- Understanding Registers and Data Movement in x86-64 Assembly
- A Programmer’s Guide to x86-64 Assembly (Series Overview)
- Why This Python Performance Trick Doesn’t Matter Anymore
- Making System Calls in x86-64 Assembly
- One Law to Rule Them All: The Iron Law of Software Performance
- Debugging X86-64 Assembly with GDB
- Building (and Breaking) Your First X86 Assembly Program
- The System-Level Foundation of Assembly
- Binary Arithmetic and Bitwise Operations for Systems Programming
- Understanding Computer Organization from First Principles
- Hardware-Aware Coding: CPU Architecture Concepts Every Developer Should Know
- Python Performance: Why 'if not list' is 2x Faster Than Using len()
- Your Enrollment is Confirmed!
- [Course Launch] Hands-on Introduction to X86 Assembly
- My Top 15 OS Books: From Theory and Implementation to Systems Programming
- Recording: How Modern CPUs Execute Your Code: A Deep Dive into Performance
- Contact Me
- A Software Engineer's Guide to Reading Research Papers
- Launching Live Courses on Systems Programming
- Linux Context Switches: The Truth About TLB Flushes
- Live Session: How Modern CPUs Execute Your Code: A Deep Dive into Performance
- How Unix Spell Ran in 64kB RAM
2024 47
- Linux Context Switching Internals: Part 1 - Process State and Memory
- Reflections on 2024 and Exciting Plans for 2025
- Recording: Live Coding a Bytecode Compiler for Python
- Context Switching and Performance: What Every Developer Should Know
- Live Session: Live Coding a Bytecode Interpreter for Python
- How Linux Implements the fork System Call
- An Unreachable Hidden XKCD Easter Egg inside CPython
- The Pythonic Emptiness
- Live Session: Live Coding a Bytecode Interpreter for Python
- The CAP Theorem of Clustering: Why Every Algorithm Must Sacrifice Something
- Speculative Decoding and Beyond: A Survey of Speculative Decoding Techniques
- CPython's Garbage Collector and its Impact on Application Performance
- Recording: Six Key Performance Engineering Lessons from 1BRC
- Celebrating 2^13 Subscribers & My Birthday
- The Design & Implementation of the CPython Virtual Machine
- CPython Internals: What Happens Before Bytecode Execution Starts
- (Live Session) Performance Thinking: Six Key Lessons from 1BRC
- Are Function Calls Still Slow in Python? An Analysis of Recent Optimizations in CPython
- How Simultaneous Multithreading Works Under the Hood
- Recording: How Hyper-Threading Works — A Microarchitectural Perspective
- Substack has Failed Indian Creators
- Looking Under the Hood of Python's Set Data Structure
- Live Session: How Hyper-Threading (Simultaneous Multithreading) Works — A Microarchitectural Perspective
- CPython Garbage Collection: The Internal Mechanics and Algorithms
- Invite your friends to read Confessions of a Code Addict
- Recording: CPython and ELF Essentials for Building a Basic Remote Profiler
- Everything You Wanted to Know About Profilers in Python
- How Python Compares Floats and Ints: When Equals Isn’t Really Equal
- CPython Memory Management Internals
- Live Session: CPython and ELF Essentials for Building a Basic Remote Profiler
- Live Session: CPython Memory Management Internals
- Recording of Live Session on CPython Virtual Machine Internals
- CPython Runtime Internals: Key Data Structures & Runtime Bootstrapping
- Live Session on CPython Virtual Machine Internals + Upcoming Posts
- Why Do Python Lists Multiply Oddly? Exploring the CPython Source Code
- Video: Architecture of Groq's LPU & Why is it so Fast?
- Recording: Comparing CPUs, GPUs & LPUs
- Recording: Comparing CPUs, GPUs & LPUs
- Live Session: CPUs, GPUs & LPUs + Ask Me Anything
- The Architecture of Groq's LPU
- Recording: Live Session on Performance Optimization Using 1BRC as a Case Study
- Recording: Live Session on Performance Optimization using 1BRC as a Case Study
- Performance Engineering and The Need for Speed
- Live Session on Performance Optimization Using 1BRC as a Case Study
- Recording: Performance Engineering Techniques Behind 1BRC
- Workshop on Performance Optimizations in Code: The One Billion Row Challenge
- New Year Slate at Confessions of a Code Addict
2023 33
- Celebrating 4096 Subscribers and Happy Holidays
- CPython Type System Internals: Video Series
- Design of the CPython Type System
- Emulating Inheritance and Polymorphism in C
- Decoding PyObject and PyTypeObject in CPython
- Implementation of the Float Built-in Type in CPython
- A War Story About a Python, a Fork, a Cow, and a Bug
- How Many Lines of C it Takes to Execute a + b in Python?
- CPython Object System Internals: Understanding the Role of PyObject
- Fast Computation of Fibonacci Numbers: Part II
- A Linear Algebra Trick for Computing Fibonacci Numbers Fast
- Code Confessions Digest #5: News, and Resources from Last Week
- What Every Developer Should Know About GPU Computing
- 1024 Reasons to Celebrate: Journey and Future of 'Confessions of a Code Addict'
- How Language Models Beat PNG and FLAC Compression & What It Means
- How CPython Implements and Uses Bloom Filters for String Processing
- Bloom Filters and Beyond: An Illustrated Introduction and Implementation
- Understanding Immortal Objects in Python 3.12: A Deep Dive into Python Internals
- How CPython Implements Reference Counting: Dissecting CPython Internals
- LZ77 Is All You Need? Why Gzip + KNN Works for Text Classification
- Decoding the ACL Paper: Gzip and KNN Rival BERT in Text Classification
- Code Confessions Digest #4: News, and Resources from Last Week
- Code Confessions Digest #3: News, and Resources from Last Week
- Common ChatGPT API Function Call Mistakes and How to Fix Them
- Weekly Code Confessions Digest #2: News, and Resources from Last Week
- A Tutorial Guide to Using The Function Call Feature of OpenAI's ChatGPT API
- Understanding DeepMind's AlphaDev Breakthrough in Optimizing Sorting Algorithms
- Weekly Code Confessions Digest: Exploring Intriguing Articles, Books, and Courses
- The Pursuit of Programming #2: Variables, Operators and Data Types
- Mojo: The Future of AI Programming 🔥
- The Pursuit of Programming #1: What, Why, and How to Start
- Will AI Replace Programmers? The Future of Coding in the Age of AI
- Confessions of a code addict