Функция alloc
Функция alloc выделяет блок памяти в куче
с заданным размером и выравниванием. Она принимает
в качестве параметров объект Layout, описывающий
размер и выравнивание выделяемой памяти. Функция
возвращает указатель на начало выделенного блока
или нулевой указатель, если выделение не удалось.
Функция является небезопасной, так как работает
с сырыми указателями и требует ручного освобождения
памяти через dealloc.
Синтаксис
unsafe fn alloc(layout: Layout) -> *mut u8
Пример
Давайте выделим блок памяти размером 16 байт с выравниванием 8 байт и запишем в него значение:
use std::alloc::{alloc, dealloc, Layout};
fn main()
{
unsafe
{
let layout = Layout::from_size_align(16, 8).unwrap();
let ptr = alloc(layout);
if !ptr.is_null()
{
*ptr = 42;
println!("{}", *ptr);
dealloc(ptr, layout);
}
}
}
Результат выполнения кода:
42
Пример
Давайте выделим блок памяти и запишем в него несколько значений через смещение указателя:
use std::alloc::{alloc, dealloc, Layout};
fn main()
{
unsafe
{
let layout = Layout::from_size_align(32, 8).unwrap();
let ptr = alloc(layout);
if !ptr.is_null()
{
*ptr = 10;
*ptr.add(8) = 20;
*ptr.add(16) = 30;
println!("{} {} {}", *ptr, *ptr.add(8), *ptr.add(16));
dealloc(ptr, layout);
}
}
}
Результат выполнения кода:
10 20 30