Blog Archive 2021 How C++ Resolves a Function Call Mar 15 2021 2020 Flap Hero Code Review Dec 10 2020 A Small Open Source Game In C++ Nov 26 2020 Automatically Detecting Text Encodings in C++ Jul 27 2020 I/O in Plywood Jul 08 2020 A New Cross-Platform Open Source C++ Framework May 26 2020 2018 A Flexible Reflection System in C++: Part 2 Jan 24 2018 A Flexible Reflection System in C++: Part 1 Jan 16 2018 2017 How to Write Your Own C++ Game Engine Dec 18 2017 Can Reordering of Release/Acquire Operations Introduce Deadlock? Jun 12 2017 Here’s a Standalone Cairo DLL for Windows May 29 2017 Learn CMake’s Scripting Language in 15 Minutes May 22 2017 How to Build a CMake-Based Project May 11 2017 2016 Using Quiescent States to Reclaim Memory Jul 26 2016 Leapfrog Probing Mar 14 2016 A Resizable Concurrent Map Feb 22 2016 New Concurrent Hash Maps for C++ Feb 01 2016 2015 You Can Do Any Kind of Atomic Read-Modify-Write Operation Apr 02 2015 Safe Bitfields in C++ Mar 24 2015 Semaphores are Surprisingly Versatile Mar 16 2015 2014 C++ Has Become More Pythonic Dec 02 2014 Fixing GCC’s Implementation of memory_order_consume Nov 24 2014 How to Build a GCC Cross-Compiler Nov 19 2014 How to Install the Latest GCC on Windows Nov 08 2014 My Multicore Talk at CppCon 2014 Oct 24 2014 The Purpose of memory_order_consume in C++11 Jul 09 2014 What Is a Bitcoin, Really? Jan 27 2014 2013 Bitcoin Address Generator in Obfuscated Python Dec 19 2013 Acquire and Release Fences Don’t Work the Way You’d Expect Nov 25 2013 Double-Checked Locking is Fixed In C++11 Sep 30 2013 Acquire and Release Fences Sep 22 2013 The Synchronizes-With Relation Aug 23 2013 The Happens-Before Relation Jul 02 2013 Atomic vs. Non-Atomic Operations Jun 18 2013 The World’s Simplest Lock-Free Hash Table Jun 05 2013 A Lock-Free… Linear Search? May 29 2013 Introducing Mintomic: A Small, Portable Lock-Free API May 05 2013 View Your Filesystem History Using Python Jan 15 2013 This Hash Table Is Faster Than a Judy Array Jan 07 2013 2012 How to Generate a Sequence of Unique Random Integers Dec 24 2012 Arithmetic Encoding Using Fixed-Point Math Nov 05 2012 Arithmetic Coding and the 1MB Sorting Problem Nov 05 2012 1MB Sorting Explained Oct 26 2012 Here’s Some Working Code to Sort One Million 8-Digit Numbers in 1MB of RAM Oct 25 2012 This Is Why They Call It a Weakly-Ordered CPU Oct 19 2012 Weak vs. Strong Memory Models Sep 30 2012 Acquire and Release Semantics Sep 13 2012 Memory Barriers Are Like Source Control Operations Jul 10 2012 Memory Ordering at Compile Time Jun 25 2012 An Introduction to Lock-Free Programming Jun 12 2012 Lightweight In-Memory Logging May 22 2012 Memory Reordering Caught in the Act May 15 2012 How to Remove Camera Shake from iPhone 4S Videos Apr 15 2012 Implementing a Recursive Mutex Mar 05 2012 Roll Your Own Lightweight Mutex Feb 26 2012 A Look Back at Single-Threaded CPU Performance Feb 08 2012 2011 A C++ Profiling Module for Multithreaded APIs Dec 03 2011 Always Use a Lightweight Mutex Nov 24 2011 Locks Aren’t Slow; Lock Contention Is Nov 18 2011 How to Generate Random Timings for a Poisson Process Oct 07 2011 High-Resolution Mandelbrot in Obfuscated Python Sep 26 2011 Timing Your Code Using Python’s “with” Statement Sep 24 2011 The Python “with” Statement by Example Sep 20 2011 Penrose Tiling Explained Aug 31 2011 Penrose Tiling in Obfuscated Python Aug 22 2011 xkcd Password Generator Aug 11 2011 The Cost of _SECURE_SCL Aug 07 2011 The Cost of Buffer Security Checks in Visual C++ Aug 07 2011 The Cost of Enabling Exception Handling Aug 07 2011 Finding Bottlenecks by Random Breaking Jul 23 2011 The Windows Heap Is Slow When Launched from the Debugger Jul 17 2011 Visual C++ Performance Pitfalls Jul 11 2011 Hash Table Performance Tests Jun 03 2011 Hash Collision Probabilities May 04 2011