This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ============================================================================ | |
// This code is in the Public Domain - I claim no copyrights over it. | |
// Use at your own leisure and risk. | |
// | |
// Compiled and tested with: | |
// c++ -std=c++11 -fno-exceptions -Wall -Wextra -pedantic -O3 spinlock_mutex.cpp | |
// ============================================================================ | |
#include <cassert> | |
#include <cstdio> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ============================================================================ | |
// This code is in the Public Domain - I claim no copyrights over it. | |
// Use at your own leisure and risk. | |
// | |
// Compiled and tested with: | |
// c++ -std=c++11 -fno-exceptions -Wall -Wextra -pedantic -O3 linear_allocator.cpp | |
// ============================================================================ | |
#include <cassert> | |
#include <cstdint> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ================================================================================================ | |
// -*- C++ -*- | |
// File: debug_allocator.hpp | |
// Author: Guilherme R. Lampert | |
// Created on: 03/12/16 | |
// | |
// About: | |
// Virtual memory pages backed debug allocator. Aligns each memory allocation to one | |
// or more pages and adds an additional header and footer protected pages, ensuring that |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// Overriding a member method of a template class/struct by defining a specialized implementation. | |
// | |
#include <cstdio> | |
#include <typeinfo> | |
template<typename T> | |
struct Foo | |
{ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// Simple unique lock guard to detect concurrent access to unsynchronized global data. | |
// | |
// This can be a useful tool to debug data races and identify places where a mutex should | |
// be introduced. Once the race is fixed, you'll likely want to strip out this code... | |
// | |
// -------------------------------------------------------- | |
#include <atomic> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ================================================================================================ | |
// -*- C++ -*- | |
// File: memory_pools.hpp | |
// Author: Guilherme R. Lampert | |
// Created on: 08/02/17 | |
// | |
// About: | |
// Useful templated memory pools of objects (header only). | |
// This file provides a DynamicPool and a pair of FixedSizePools, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// -------------------------------------------------------------------------------------- | |
// Atomic singly-linked intrusive list using 128-bits Compare And Swap (AKA: DCAS). | |
// Keeps a version counter with the list head to prevent the A-B-A problem. | |
// | |
// Based on the implementation found in moodycamel.com: | |
// http://moodycamel.com/blog/2014/solving-the-aba-problem-for-lock-free-free-lists | |
// | |
// My implementation uses raw GCC/Clang atomics intrinsics. While in theory | |
// std::atomic of a struct of exactly 16 bytes and properly aligned could |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// Simple stack-based virtual machine tests. | |
// | |
// I use two slightly different strategies to manage the | |
// interpreter stack: First is using the "naive" approach | |
// of keeping a stack pointer that is bumped/decremented | |
// for every instruction that has stack operands. The second | |
// approach uses a "stack cache" register to cache the | |
// Top-of-Stack (TOS) value. | |
// |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ---------------------------------------------------------------------------- | |
// Least Recently Used cache backed by a hash table | |
// (unprdered_map) and a fixed-size circular queue. | |
// | |
// License: | |
// Public Domain. | |
// Feel free to copy, distribute, and modify this file as you see fit. | |
// ---------------------------------------------------------------------------- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
// ======================================================== | |
#include <algorithm> | |
#include <array> | |
#include <cstddef> | |
#include <cstdint> | |
#include <cstring> |
OlderNewer