#pragma once /** * @file tempFXAlloc.h * @author felex67 (admin@felexdev.ru) * @brief FXAlloc - fast pooled allocator-profiler * @version 0.0.1 dev * @date 2026-05-06 * * License: Apache 2.0 * */ #include #ifdef _WIN32 // Windows #include #define thread_local __declspec(thread) typedef HANDLE fxsync_t; #else // Linux #include #define thread_local __thread typedef pthread_mutex_t fxsync_t; #endif //_WIN32 #pragma pack(push, 8) /** * @brief Memory block meta-data * size: 24 bytes */ typedef struct FXMemoryBlock { FXMemoryBlock* next; ///< Next block in lifo FXMemoryBlock* list; ///< Next block total uint32_t thread_idx; ///< Thread index uint32_t grade_idx; ///< Grade index } FXMemoryBlock; #pragma pack(push, 8) /** * @brief Grade pool * */ typedef struct FXGradePool { FXMemoryBlock* prealloced; FXMemoryBlock* lifo; FXMemoryBlock* list_first; FXMemoryBlock* list_last; uint32_t ntotal; uint32_t nbusy; uint32_t nalloc; uint32_t nprealloc; } FXGradePool; #pragma pack(push, 8) /** * @brief Thread memory pool * */ typedef struct FXThreadPool { uint32_t isActive; uint32_t ngrades; FXGradePool grades[]; } FXThreadPool; #pragma pack(pop) typedef struct FXGlobalMemoryPool { FXThreadPool** pools; fxsync_t mutex; } FXGlobalMemoryPool;