34class BestFitRangeAllocator;
61 u64 peak_request_size;
92 [[nodiscard]] u32 GetBase()
const;
94 [[nodiscard]] u32 GetSize()
const;
98 [[nodiscard]]
bool Contains(u32 address)
const;
125 [[nodiscard]]
bool IsConsistent()
const;
128 friend class rex::kernel::shim::GuestHeap;
131 u32 size, u32 alignment,
132 bool physical, u32 page_size,
140 mutable std::mutex mutex_;
143 u64 peak_allocated_ = 0;
144 u64 peak_request_size_ = 0;
152class GuestAddressSpace;
172 virtual void Free(u32 address) = 0;
204 [[nodiscard]] u32 GetSize()
const;
223 void Free(u32 address)
override;
229 std::unique_ptr<BestFitRangeAllocator> ranges_;
230 mutable std::mutex mutex_;
static const char * GetPoolPlotName(GuestPool pool)
static constexpr u32 kBlockAlignment
Definition guest_allocator.h:55
void * Reallocate(void *block, u32 size)
GuestAllocator(Key, GuestAddressSpace &memory, u32 base, u32 size, void *state, GuestPool pool)
void * Allocate(u32 size)
static Result< std::unique_ptr< GuestAllocator > > Create(rex::kernel::GuestMemory &memory, u32 size, u32 alignment, bool physical, u32 page_size, u32 flags, GuestPool pool)
Definition guest_memory.h:46
Definition guest_allocator.h:155
virtual Result< u32 > Allocate(u32 size, bool zero)=0
virtual void Free(u32 address)=0
Definition guest_allocator.h:179
void Free(u32 address) override
static u32 ResolveSize(u32 header_size)
WorkspaceHeap(Key, GuestAddressSpace &memory, u32 base, u32 size)
Result< u32 > Allocate(u32 size, bool zero) override
static Result< std::unique_ptr< WorkspaceHeap > > Create(GuestAddressSpace &memory, u32 size)
Definition guest_allocator.h:27
GuestPool
Definition guest_allocator.h:38
@ kHeap
Definition guest_allocator.h:39
@ kCount
Definition guest_allocator.h:42
GuestHeap
Definition guest_memory.h:35
std::expected< T, Error > Result
Definition result.h:98
Definition guest_allocator.h:57
Integer types, byte order wrappers and size literals.
Move only function, const propagating pointer and scope guard.