Тип Layout
Тип Layout из модуля std::alloc описывает
размер и выравнивание блока памяти. Он используется
для низкоуровневого управления памятью, например,
при работе с alloc и dealloc.
Layout создаётся через методы Layout::new,
Layout::from_size_align и Layout::array.
Параметром метод Layout::new принимает тип,
размер и выравнивание которого нужно вычислить.
Синтаксис
Layout::new::<T>()
Layout::from_size_align(size, align)
Layout::array::<T>(n)
Пример
Давайте создадим Layout для типа u32
и выведем его размер и выравнивание:
use std::alloc::Layout;
fn main()
{
let layout = Layout::new::<u32>();
println!("size: {}", layout.size());
println!("align: {}", layout.align());
}
Результат выполнения кода:
size: 4
align: 4
Пример
Давайте создадим Layout для массива из 5 элементов
типа u32 с помощью метода Layout::array:
use std::alloc::Layout;
fn main()
{
let layout = Layout::array::<u32>(5).unwrap();
println!("size: {}", layout.size());
println!("align: {}", layout.align());
}
Результат выполнения кода:
size: 20
align: 4
Пример
Давайте создадим Layout вручную с помощью метода
Layout::from_size_align и проверим его параметры:
use std::alloc::Layout;
fn main()
{
let layout = Layout::from_size_align(16, 8).unwrap();
println!("size: {}", layout.size());
println!("align: {}", layout.align());
}
Результат выполнения кода:
size: 16
align: 8
Пример
Давайте проверим, что произойдёт при попытке создать Layout с выравниванием, не являющимся степенью двойки:
use std::alloc::Layout;
fn main()
{
let res = Layout::from_size_align(16, 3);
println!("{:?}", res.is_err());
}
Результат выполнения кода:
true