Skip to main content

align_of_val_raw

Function align_of_val_raw 

1.99.0 (const: 1.99.0) · Source
pub const unsafe fn align_of_val_raw<T: ?Sized>(val: *const T) -> usize
Expand description

Returns the ABI-required minimum alignment of the type of the value that val points to, in bytes.

This function is identical to align_of_val(), except that it can be used with raw pointers in situations where it would be unsound or undesirable to convert them to & references and impose the aliasing rules that come with that.

§Safety

This function is safe to call if the pointer is safe to reborrow as &T (in which case you could also call align_of_val). Otherwise, the following conditions must hold:

  • If T is Sized, this function is always safe to call.
  • If the unsized tail of T is:
    • a slice [U], str, or a trait object dyn Trait, then the size of the entire value (dynamic tail length + statically sized prefix) must fit in isize. 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.

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.

§Examples

use std::mem;

assert_eq!(4, unsafe { mem::align_of_val_raw(&5i32) });

(Caution: it is not guaranteed that the alignment of i32 is 4; that is, the above assertion does not pass on all platforms.)