Stack

Whenever we hold a value (includes function arguments) we must know its size, so that the stack pointer can be moved properly.

#![allow(unused)] fn main() { struct S { data: [u8; 0x1000], } println!("0x{:x}", std::mem::size_of::<S>()); }

Knowing the size of a value of a type is indicated by the marker trait Sized.

fn f<T: Sized>(t: T) {}