alloc — 전역 할당자로 메모리 할당하기
alloc — 전역 할당자로 메모리 할당하기
alloc은 Rust의 전역 할당자(global allocator) 로 메모리를 할당하는 함수예요. #[global_allocator] 속성으로 등록된 할당자가 있으면 그 할당자의 GlobalAlloc::alloc 메서드를 호출하고, 없으면 std 크레이트의 기본 할당자를 사용해요. 나중에 Global 타입의 allocate 메서드가 안정화되면 이 함수는 deprecated 될 예정이에요.
출처: Rust 공식 문서
본문
pub unsafe fn alloc(layout: Layout) -> *mut u8
반환된 포인터가 널(null)인지 직접 확인해야 하며, layout에 맞는 메모리 블록을 할당해요. 할당은 unsafe라서 호출하는 쪽에서 메모리 안전을 보장해야 해요.
Safety (안전성): GlobalAlloc::alloc 의 안전 요구사항을 그대로 따라요.
예시:
use std::alloc::{alloc, dealloc, handle_alloc_error, Layout};
unsafe {
let layout = Layout::new::<u16>();
let ptr = alloc(layout);
if ptr.is_null() {
handle_alloc_error(layout);
}
*(ptr as *mut u16) = 42;
assert_eq!(*(ptr as *mut u16), 42);
dealloc(ptr, layout);
}