pub const unsafe fn size_of_val_raw<T>(val: *const T) -> usizewhere
T: ?Sized,Expand description
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 safe to call if the pointer is safe to reborrow as &T
(in which case you could also call size_of_val).
Otherwise, the following conditions must hold:
- If
TisSized, this function is always safe to call. - If the unsized tail of
Tis:- a slice
[U],str, or a trait objectdyn Trait, then the size of the entire value (dynamic tail length + statically sized prefix) must fit inisize. For the special case where the dynamic tail length is 0, this function is safe to call. - No other kind of unsized tail currently exists that satisfies the trait bounds for this function. If more kinds of unsized tails get introduced in the future, the documentation of this function will have to be extended before it can be used for such types.
- a slice
Here, unsized tail refers to the type obtained by recursively descending through the last field of a tuple or struct until we arrived at a built-in unsized type.
As a consequence of these rules, it is the case that whenever it is allowed to convert val
into a shared reference, then it is also allowed to invoke this function.