РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1236 of 1245 menu

Функция 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

Смотрите также

  • функция dealloc,
    которая освобождает ранее выделенную память
  • структура Layout,
    которая описывает размер и выравнивание памяти
  • функция write,
    которая записывает значение по указателю
  • функция read,
    которая читает значение по указателю
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить