저는 간단한 바이너리 디코더를 작성하여 Rust를 배우고 있습니다.
숫자를 읽기 BufferedReader
위해 byteorder 크레이트 와 함께 a 를 사용하고 있지만 바이트 버퍼를 읽는 데 문제가 있습니다.
런타임에 할당 된 버퍼로 바이트 데이터를 읽고 싶습니다. 그런 다음이 버퍼의 소유권을 구조체에 전달하고 싶습니다. 구조체가 더 이상 사용되지 않으면 버퍼를 할당 해제해야합니다.
일부 Vec::with_capacity()
해킹을 제외하고는 힙에서 런타임에 크기가 결정된 배열을 할당 할 방법이없는 것 같습니다 . 적절한 Rust 의미론으로 이것을 구현하는 방법에 대한 아이디어가 있습니까?
Rust는 저수준 언어입니다. 따라서 원시 메모리를 할당 한 다음 객체로 직접 채울 수 있습니다. 물론 unsafe
원시 메모리를 조작하는 모든 사람과 마찬가지로 코드 가 필요 합니다.
다음은 완전한 예입니다 .
use std::{
alloc::{self, Layout},
mem, ptr,
};
fn main() {
unsafe {
let layout = Layout::from_size_align(512 * 1024, 4 * 1024).expect("Invalid layout");
let mut raw: *mut i32 = mem::transmute(alloc::alloc(layout));
for i in 0..(512 * 1024 / 4) {
ptr::write(raw, i as i32);
raw = raw.offset(1)
}
}
}
물론 실제 코드에서는 Vec
메모리를 안전하게 관리하는 데 사용 합니다. 더 간단합니다!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다