Why does listing require additional memory?

I understand that it enumis similar to unionin C, and the system will allocate the largest of the data types in the enumeration.

enum E1 {
    DblVal1(f64),
}

enum E2 {
    DblVal1(f64),
    DblVal2(f64),
    DblVal3(f64),
    DblVal4(f64),
}

fn main() {
    println!("Size is {}", std::mem::size_of::<E1>());
    println!("Size is {}", std::mem::size_of::<E2>());
}

Why E1is it occupying 8 bytes, as expected, but E2occupying 16 bytes?

+4
source share
2 answers

Rust, unlike C, enumhas tagged associations . That is, he enumknows how important it is. Thus, 8 bytes would not be enough, because there was no room for a tag.

+7
source

, , , , . .

; "" , Option<&T>. E1 - ; , .

undefined . , , repr, , , .

Rust. / (, ). , , .

. :

+2

All Articles