Rust - 데이터 타입(자료형)/객체 크기 확인

러스트의 기본 자료형의 크기를 확인하거나, 할당된 객체의 사이즈를 계산하는 방법을 알아보겠습니다.

1. 기본 자료형 크기 확인 (size_of)

mem::size_of()을 이용하여 어떤 타입의 크기를 확인할 수 있습니다.

  • use std::mem 모듈 import
  • mem::size_of::<TYPE>()은 TYPE의 사이즈 리턴

아래 예제는 u16 자료형의 크기를 바이트로 출력합니다.

use std::mem;

fn main() {
    println!("u16: {} byte", mem::size_of::<u16>());
}

Output:

u16: 2 byte

다양한 자료형의 크기 확인

use std::mem;

fn main() {
    println!("bool: {} byte", mem::size_of::<bool>());

    println!("u8: {} byte", mem::size_of::<u8>());
    println!("u16: {} bytes", mem::size_of::<u16>());
    println!("u32: {} bytes", mem::size_of::<u32>());
    println!("u64: {} bytes", mem::size_of::<u64>());

    println!("i8: {} byte", mem::size_of::<i8>());
    println!("i16: {} bytes", mem::size_of::<i16>());
    println!("i32: {} bytes", mem::size_of::<i32>());
    println!("i64: {} bytes", mem::size_of::<i64>());

    println!("f32: {} bytes", mem::size_of::<f32>());
    println!("f64: {} bytes", mem::size_of::<f64>());

    println!("char: {} bytes", mem::size_of::<char>());
}

Output:

bool: 1 byte
u8: 1 byte
u16: 2 bytes
u32: 4 bytes
u64: 8 bytes
i8: 1 byte
i16: 2 bytes
i32: 4 bytes
i64: 8 bytes
f32: 4 bytes
f64: 8 bytes
char: 4 bytes

2. struct 크기 확인 (size_of)

정의된 struct의 이름과 size_of()로 struct의 크기를 계산할 수 있습니다.

아래 예제는 Person의 사이즈를 계산하여 출력하는 코드입니다.

use std::mem;

struct Person {
    name: String,
    age: u32,
}

fn main() {
    println!("Person: {} byte", mem::size_of::<Person>());
}

Output:

Person: 32 byte

3. 배열 크기 확인 (size_of)

길이가 5인 배열은 [i32; 5]로 선언할 수 있는데요.

이것을 size_of에 전달하여 배열의 크기를 확인할 수 있습니다.

use std::mem;

fn main() {
    let arr: [i32; 5] = [1, 2, 3, 4, 5];

    println!("[i32; 5]: {} byte", mem::size_of::<[i32; 5]>());
}

Output:

[i32; 5]: 20 byte

4. 객체/변수 크기 확인 (size_of_val)

타입이 아닌, 생성된 객체에 대한 사이즈를 확인하려면 mem::size_of_val()를 사용해야 합니다.

  • use std::mem 모듈 import
  • mem::size_of_val(&VAR))는 VAR 객체의 크기 리턴 (Reference로 인자 전달)

아래 예제는 기본 자료형, struct, 배열 객체에 대한 크기를 출력하는 예제입니다.

use std::mem;

struct Person {
    name: String,
    age: u32,
}

fn main() {
    // 기본 자료형의 객체
    let b: bool = false;
    println!("b: {} byte", mem::size_of_val(&b));

    // struct의 객체
    let p: Person = Person {
        name: String::from("Alex"),
        age: 30,
    };
    println!("p: {} byte", mem::size_of_val(&p));

    // 배열 객체
    let arr: [i32; 5] = [1, 2, 3, 4, 5];
    println!("arr: {} byte", mem::size_of_val(&arr));
}

Output:

b: 1 byte
p: 32 byte
arr: 20 byte
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha