1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
// This file is part of context-allocator. It is subject to the license terms in the COPYRIGHT file found in the top-level directory of this distribution and at https://raw.githubusercontent.com/lemonrock/context-allocator/master/COPYRIGHT. No part of context-allocator, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the COPYRIGHT file. // Copyright © 2019 The developers of context-allocator. See the COPYRIGHT file in the top-level directory of this distribution and at https://raw.githubusercontent.com/lemonrock/context-allocator/master/COPYRIGHT. /// A memory source is a sort-of crude allocator that can obtain and release memory, from, say, the operating system, an arena or some fixed range. /// /// It is thread-aware but not necessarily thread-safe. pub trait MemorySource: Debug { /// Obtain memory from the operating system, say. /// /// Alignment will be whatever is appropriate, but is likely to be quite large. fn obtain(&self, non_zero_size: NonZeroUsize) -> Result<MemoryAddress, AllocErr>; /// Release memory to the operating system, say. /// /// Alignment will be whatever is appropriate, but is likely to be quite large. fn release(&self, non_zero_size: NonZeroUsize, current_memory: MemoryAddress); }