71 lines
2 KiB
C++
71 lines
2 KiB
C++
/** @file ArenaConfig.hpp
|
|
*
|
|
* @author Roland Conybeare, Dec 2025
|
|
**/
|
|
|
|
#pragma once
|
|
|
|
#include "AllocHeaderConfig.hpp"
|
|
#include <string>
|
|
#include <cstdint>
|
|
|
|
namespace xo {
|
|
namespace mm {
|
|
|
|
/** @class ArenaConfig
|
|
*
|
|
* @brief configuration for a @ref DArena instance
|
|
**/
|
|
struct ArenaConfig {
|
|
/** @defgroup mm-arenaconfig-ctors **/
|
|
///@{
|
|
|
|
/** NOTE: not providing explicit ctors so we can use designated initializers **/
|
|
|
|
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 */
|