Rust has a handful of mechanisms to lay out compound types in memory. They are as follows:
- Arrays
- Enums
- Structs
- Tuples
Exactly how these are laid out in memory depends on the representation chosen. By default, everything in Rust is repr(Rust). All repr(Rust) types are aligned on byte boundaries to the power of two. Every type is at least one byte in memory, then two, then four, and so forth. Primitives—u8, usize, bool, and &T—are aligned to their size. In Rust, representation structures have alignment according to the largest field. Consider the following struct:
struct AGC { elapsed_time2: u16, elapsed_time1: u16, wait_list_upper: u32, wait_list_lower: u16, digital_autopilot: u16, fine_scale: u16 }
AGC is aligned to u32 with padding inserted as appropriate to match that 32-bit alignment. Rust will re-order fields to achieve...