25 #ifndef GRPC_CORE_LIB_GPRPP_ARENA_H
26 #define GRPC_CORE_LIB_GPRPP_ARENA_H
59 static constexpr
size_t base_size =
63 if (begin + size <= initial_zone_size_) {
64 return reinterpret_cast<char*
>(
this) + base_size + begin;
66 return AllocZone(size);
74 template <
typename T,
typename... Args>
75 T*
New(Args&&... args) {
76 T* t =
static_cast<T*
>(
Alloc(
sizeof(T)));
77 new (t) T(std::forward<Args>(args)...);
98 explicit Arena(
size_t initial_size,
size_t initial_alloc = 0)
100 initial_zone_size_(initial_size) {}
104 void* AllocZone(
size_t size);
108 Atomic<size_t> total_used_;
109 const size_t initial_zone_size_;
116 Zone* last_zone_ =
nullptr;
static Arena * Create(size_t initial_size)
Definition: arena.cc:63
T * New(Args &&... args)
Definition: arena.h:75
size_t Destroy()
Definition: arena.cc:77
static std::pair< Arena *, void * > CreateWithAlloc(size_t initial_size, size_t alloc_size)
Definition: arena.cc:67
void * Alloc(size_t size)
Definition: arena.h:58
T FetchAdd(Arg arg, MemoryOrder order=MemoryOrder::SEQ_CST)
Definition: atomic.h:71
Round Robin Policy.
Definition: backend_metric.cc:26
#define GPR_SPINLOCK_STATIC_INITIALIZER
Definition: spinlock.h:37
#define GPR_ROUND_UP_TO_ALIGNMENT_SIZE(x)
Given a size, round up to the next multiple of sizeof(void*).
Definition: alloc.h:25
Definition: spinlock.h:29