36#include <ogdf/basic/internal/config_autogen.h>
41#ifndef OGDF_MEMORY_POOL_NTS
137#ifndef OGDF_MEMORY_POOL_NTS
143#ifndef OGDF_MEMORY_POOL_NTS
154 nWords = (nBytes + OGDF_SIZEOF_POINTER - 1) / OGDF_SIZEOF_POINTER;
155 return (
BLOCK_SIZE - OGDF_SIZEOF_POINTER) / (nWords * OGDF_SIZEOF_POINTER);
173#ifdef OGDF_MEMORY_POOL_NTS
Basic declarations, included by all source files.
Allocates memory in large chunks for better runtime.
static size_t memoryAllocatedInBlocks()
Returns the total amount of memory (in bytes) allocated from the system.
static void getGlobalFreeListSizes(std::vector< size_t > &sizes)
Reports the number of pooled memory chunks in the global free lists for each possible size up to TABL...
static void deallocateList(size_t nBytes, void *pHead, void *pTail)
Deallocate a complete list starting at pHead and ending at pTail.
static constexpr size_t TABLE_SIZE
static thread_local long long s_locallyAllocatedBytes
Holds the number of thread-locally allocated bytes for debugging.
static size_t memoryInGlobalFreeList()
Returns the total amount of memory (in bytes) available in the global free lists.
static std::mutex s_mutex
static void * allocate(size_t nBytes)
Allocates memory of size nBytes.
static constexpr size_t MIN_BYTES
static void deallocate(size_t nBytes, void *p)
Deallocates memory at address p which is of size nBytes.
static void defragThread()
Defragments the thread's free lists.
static constexpr size_t BLOCK_SIZE
static void getThreadFreeListSizes(std::vector< size_t > &sizes)
Reports the number of pooled memory chunks in the thread's free lists for each possible size up to TA...
static long long s_globallyAllocatedBytes
Holds the number of globally allocated bytes for debugging.
static PoolElement s_pool[TABLE_SIZE]
Contains allocated but free memory that may be used by all threads. Filled upon exiting a thread that...
static thread_local MemElemPtr s_tp[TABLE_SIZE]
Contains the allocated but free memory for a single thread.
static void cleanup()
Frees all allocated memory.
static void * fillPool(MemElemPtr &pFreeBytes, uint16_t nBytes)
static void defragGlobal()
Defragments the global free lists.
static int slicesPerBlock(uint16_t nBytes, int &nWords)
static MemElemPtr allocateBlock()
static bool checkSize(size_t nBytes)
Returns true iff allocate can be invoked with nBytes.
static size_t memoryInThreadFreeList()
Returns the total amount of memory (in bytes) available in the thread's free lists.
static void makeSlices(MemElemPtr p, int nWords, int nSlices)
static void flushPool()
Flushes all free but allocated bytes (s_tp) to the thread-global list (s_pool) of allocated bytes.
static int slicesPerBlock(uint16_t nBytes)
static BlockChain * s_blocks
Holds all allocated memory independently of whether it is cleared in chunks of size BLOCK_SIZE.
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF dynamic library (shared object / DLL),...
The namespace for all OGDF objects.
Basic memory element used to realize a linked list of deallocated memory segments.