Rust는 enum 값을 배열에 어떻게 저장하나요? (번역)
https://stackoverflow.com/questions/40365336/how-does-rust-store-enum-values-in-arrays
질문
다음은 유효한 Rust 코드입니다.
enum Foo
{
** One(i32, i32, i32),**
** Two { x: i32, y: i32 },**
}
fn main()
{
** let x: [Foo; 2] = [**
** Foo::One(1, 2, 3),**
** Foo::Two { x: 1, y: 2 }**
** ];**
}
Rust는 이걸 어떻게 저장하나요?
첫번째 요소 One은 12바이트고 두번째 Two는 8바이트란 말이죠. 태그 바이트도 아마 앞에 붙을거고요.
아니면 요소에 대한 참조만 저장하는 걸까요?
답변1
enum의 모든 variant들은 동일한 양의 메모리를 사용합니다.
Foo 타입의 경우 제 컴퓨터에서는 16 바이트네요.
enum 값의 크기는 가장 큰 variant의 크기로 결정됩니다. 질문자님의 경우엔 One이겠죠?
따라서 값들이 배열에 바로 들어갈 수 있는 겁니다.