pub unsafe trait Unaligned { }
Expand description
Types with no alignment requirement.
If T: Unaligned
, then align_of::<T>() == 1
.
§Implementation
Do not implement this trait yourself! Instead, use
#[derive(Unaligned)]
; e.g.:
#[derive(Unaligned)]
#[repr(C)]
struct MyStruct {
...
}
#[derive(Unaligned)]
#[repr(u8)]
enum MyEnum {
...
}
#[derive(Unaligned)]
#[repr(packed)]
union MyUnion {
...
}
This derive performs a sophisticated, compile-time safety analysis to
determine whether a type is Unaligned
.
§Safety
This section describes what is required in order for T: Unaligned
, and
what unsafe code may assume of such types. If you don’t plan on implementing
Unaligned
manually, and you don’t plan on writing unsafe code that
operates on Unaligned
types, then you don’t need to read this section.
If T: Unaligned
, then unsafe code may assume that it is sound to produce a
reference to T
at any memory location regardless of alignment. If a type
is marked as Unaligned
which violates this contract, it may cause
undefined behavior.
#[derive(Unaligned)]
only permits types which satisfy these
requirements.
Implementations on Foreign Types§
impl Unaligned for Option<NonZeroI8>
impl Unaligned for Option<NonZeroU8>
impl Unaligned for bool
impl Unaligned for i8
impl Unaligned for str
impl Unaligned for u8
impl Unaligned for ()
impl Unaligned for AtomicBool
target_has_atomic="8"
and rust="1.60.0"
only.impl Unaligned for AtomicI8
target_has_atomic="8"
and rust="1.60.0"
only.impl Unaligned for AtomicU8
target_has_atomic="8"
and rust="1.60.0"
only.