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을 쓰거나
vec이 벡터 얘기하는거임? 자료구조 벡터겠지?
애초에 터지는걸 막으려고 만든언어인데 뭔소리 하는거냐 얘는