Skip to content
Archive of entries posted on

The XOR Linked List In C++

Background It is possible to store the pointers in a linked list in such a way that they ‘overlap’ by using the logical XOR operator.  This allows a user to cut the memory footprint of a basic linked list by 50% at the expense of a couple extra CPU operations.  In today’s world this technique […]

Endianness: Big Endian vs. Little Endian; Shifting and Casting Examples

Background I ran into a bug recently where I was trying to extract the lower 32 bits from a 64 bit pointer referencing two contiguous 32 bit variables in memory.   They were taken out opposite what was expected due to my confusion with the way data is stored.  There is a fairly good writeup […]

OpenVPN And PPP on Linux: VPN Traffic Forwarding Default Gateway Fix

Background I use OpenVPN all the time and had the task of setting it up to function as the default gateway for an embedded linux machine that is using PPP with a USB 3G dongle.  The VPN connection worked great as always but for some reason I couldn’t get the traffic forwarded over the 3G line. […]

The Difference Between Blocking, Lock-Free, and Wait-Free Queues

Background I recently grew an interest in lock free queues and during my research noticed some confusion concerning blocking, lock-free, and wait-free queues.  There are quite a few claimed implementations that do not meet the requirements.  This is my attempt to alleviate some confusion.  I define an interrupt safe queue as one that will succeed […]

Starting a blog

Finally starting a blog after all these years to keep track of all the cool stuff I usually end up misplacing.