Function std::mem::size_of_val_raw
pub unsafe fn size_of_val_raw<T>(val: *const T) -> usize where T: ?Sized,
Returns the size of the pointed-to value in bytes.
This is usually the same as size_of::<T>()
. However, when T
has no statically-known size, e.g., a slice [T]
or a trait object, then size_of_val_raw
can be used to get the dynamically-known size.
Safety
This function is only safe to call if the following conditions hold:
- If
T
isSized
, this function is always safe to call. - If the unsized tail of
T
is:- a slice, then the length of the slice tail must be an initialized integer, and the size of the entire value (dynamic tail length + statically sized prefix) must fit in
isize
. - a trait object, then the vtable part of the pointer must point to a valid vtable acquired by an unsizing coercion, and the size of the entire value (dynamic tail length + statically sized prefix) must fit in
isize
. - an (unstable) extern type, then this function is always safe to call, but may panic or otherwise return the wrong value, as the extern type’s layout is not known. This is the same behavior as
size_of_val
on a reference to a type with an extern type tail. - otherwise, it is conservatively not allowed to call this function.
- a slice, then the length of the slice tail must be an initialized integer, and the size of the entire value (dynamic tail length + statically sized prefix) must fit in
Examples
#![feature(layout_for_ptr)] use std::mem; assert_eq!(4, mem::size_of_val(&5i32)); let x: [u8; 13] = [0; 13]; let y: &[u8] = &x; assert_eq!(13, unsafe { mem::size_of_val_raw(y) });
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/mem/fn.size_of_val_raw.html