/** @file ArenaConfig.hpp * * @author Roland Conybeare, Dec 2025 **/ #pragma once #include "AllocHeaderConfig.hpp" #include #include namespace xo { namespace mm { /** @class ArenaConfig * * @brief configuration for a @ref DArena instance **/ struct ArenaConfig { /** @defgroup mm-arenaconfig-ctors **/ ArenaConfig with_name(std::string name) const { ArenaConfig copy(*this); copy.name_ = name; return copy; } ArenaConfig with_size(std::size_t z) const { ArenaConfig copy(*this); copy.size_ = z; return copy; } ArenaConfig with_store_header_flag(bool x) const { ArenaConfig copy(*this); copy.store_header_flag_ = x; return copy; } /** @defgroup mm-arenaconfig-instance-vars ArenaConfig members **/ ///@{ /** optional name, for diagnostics **/ std::string name_; /** desired arena size -- hard max = reserved virtual memory **/ std::size_t size_ = 0; /** hugepage size -- using huge pages relieves some TLB pressure * (provided you use their full extent :) **/ std::size_t hugepage_z_ = 2 * 1024 * 1024; /** true to store header (8 bytes) at the beginning of each allocation. * necessary and sufficient to allows iterating over allocs * present in arena. **/ bool store_header_flag_ = false; /** configuration for per-alloc header **/ AllocHeaderConfig header_{}; /** true to enable debug logging **/ bool debug_flag_ = false; ///@} }; } /*namespace mm*/ } /*namespace xo*/ /* end ArenaConfig.hpp */