Rust의 단점이라면 엄청나게 큰 배열을 쉽게 선언할 수 없어.

왜냐면 모든 객체가 스택에 생성되기 때문이지. 그렇기 때문에 엄청나게 큰 배열을 선언하려면 꼼수가 필요함.

fn main(){
    let mut c:[u8; 1024 * 1024 * 100] = [0u8; 1024 * 1024 * 100];// 100MiB
    for i in 0..c.len(){
        println!("{:02x}", c[i]);
    }
}

스택오버플로우로 터짐.


그러면 스택이 아니라 힙에 선언해야 하는데, 객체를 힙에 할당하는 모듈(혹은 타입)이 Box임

fn main(){
    let mut c:Box<[u8; 1024 * 1024 * 100]> =Box::new([0u8; 1024 * 1024 * 100]) ; // 100MiB
    for i in 0..c.len(){
        println!("{:02x}", c[i]);
    }
}

근데 이것도 터짐. 저 초기화를 위한 배열이 스택에 할당되서 터져버림.

let mut c:Box<[u8; 1024 * 1024 * 100]> =unsafe{Box::new( std::mem::uninitialized())} ;
    for i in 0..c.len(){
        println!("{:02x}", c[i]);
    }

그래서 이런식으로 unsafe구문을 사용해서 초기화를 피하거나 0으로 채우거나 하는 방법으로 피해가야 함. 아니면 그냥 Vec을 쓰거나