Consider a Rust program that must create many instances of a struct in memory. The size in bytes of each struct will begin to matter to the program's performance.
With repr packed, we can change the struct layout to be condensed for minimal memory usage. This can speed up (or slow down) programs.
This program has 2 structs: the Node struct, and the NodePacked struct. The NodePacked struct uses the packed representation.
struct has a 4-byte id, and a 1-byte data member. The packed struct is 5 bytes, but the first struct is 8 bytes.struct. Some structs, like those with pointers to the heap, should not be packed.size_of function from std mem to get the size of the structs in the program.use std::mem;
struct Node {
id: u32,
data: u8,
}
#[repr(packed)]
struct NodePacked {
id: u32,
data: u8,
}
fn main() {
println!("{}", mem::size_of::<NodePacked>());
println!("{}", mem::size_of::<Node>());
}5
8We can see a performance loss, or a performance gain with packed repr on a struct in Rust. Accesses to some fields will no longer be aligned, so they will slow down.
struct can sometimes influence performance—this depends on how a field is aligned in memory.With repr packed, we can adjust the memory usage of a Rust program. And with size_of, we can monitor memory usage changes and keep track of struct sizes.