Struct OutOfMemory
pub struct OutOfMemory { /* private fields */ }Expand description
Out-of-memory error.
This error is the sentinel for allocation failure due to memory exhaustion.
Constructing an Error from an OutOfMemory does not
allocate.
Allocation failure inside any Error method that must allocate
(e.g. Error::context) will propagate an
OutOfMemory error.
Implementations§
§impl OutOfMemory
impl OutOfMemory
pub const fn new(requested_allocation_size: usize) -> OutOfMemory
pub const fn new(requested_allocation_size: usize) -> OutOfMemory
Construct a new OutOfMemory error.
The requested_allocation_size argument should be the size (in bytes)
of the associated allocation that was attempted and failed.
This operation does not allocate.
§Example
use alloc::alloc::{Layout, alloc};
use core::ptr::NonNull;
/// Attempt to allocate a block of memory from the global allocator,
/// returning an `OutOfMemory` error on failure.
fn try_global_alloc(layout: Layout) -> Result<NonNull<u8>, OutOfMemory> {
if layout.size() == 0 {
return Ok(NonNull::dangling());
}
// Safety: the layout's size is non-zero.
let ptr = unsafe { alloc(layout) };
if let Some(ptr) = NonNull::new(ptr) {
Ok(ptr)
} else {
// The allocation failed, so return an `OutOfMemory` error,
// passing the attempted allocation's size into the `OutOfMemory`
// constructor.
Err(OutOfMemory::new(layout.size()))
}
}pub fn requested_allocation_size(&self) -> usize
pub fn requested_allocation_size(&self) -> usize
Get the size (in bytes) of the associated allocation that was attempted and which failed.
Very large allocation sizes (near isize::MAX and larger) may be capped
to a maximum value.
§Example
let oom = OutOfMemory::new(8192);
assert_eq!(oom.requested_allocation_size(), 8192);Trait Implementations§
§impl Clone for OutOfMemory
impl Clone for OutOfMemory
§fn clone(&self) -> OutOfMemory
fn clone(&self) -> OutOfMemory
Returns a duplicate of the value. Read more
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read more§impl Debug for OutOfMemory
impl Debug for OutOfMemory
§impl Display for OutOfMemory
impl Display for OutOfMemory
§impl Error for OutOfMemory
impl Error for OutOfMemory
§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
Returns the lower-level source of this error, if any. Read more
1.0.0§fn description(&self) -> &str
fn description(&self) -> &str
👎Deprecated since 1.42.0: use the Display impl or to_string()
impl Copy for OutOfMemory
impl Send for OutOfMemory
impl Sync for OutOfMemory
Auto Trait Implementations§
impl Freeze for OutOfMemory
impl RefUnwindSafe for OutOfMemory
impl Unpin for OutOfMemory
impl UnwindSafe for OutOfMemory
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
🔬This is a nightly-only experimental API. (
clone_to_uninit)§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more