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

Функция write_unaligned

Функция write_unaligned записывает значение типа T по сырому указателю *mut T, который может быть невыровненным. В отличие от обычной записи через разыменование указателя, данная функция не требует, чтобы адрес был кратен размеру выравнивания типа T. Первым параметром функция принимает указатель *mut T, по которому будет произведена запись, а вторым - значение value, которое нужно записать. Функция является небезопасной, так как не проверяет корректность указателя.

Синтаксис

unsafe fn write_unaligned<T>(dst: *mut T, src: T)

Пример

Давайте запишем значение 42u32 по невыровненному указателю, полученному из буфера типа u8 со смещением 1:

use std::ptr; fn main() { let mut buf = [0u8; 8]; let ptr = buf.as_mut_ptr().wrapping_add(1) as *mut u32; unsafe { ptr::write_unaligned(ptr, 42u32); } let value = unsafe { ptr::read_unaligned(ptr) }; println!("{}", value); }

Результат выполнения кода:

42

Пример

Давайте запишем значение 3.14f64 по невыровненному указателю внутри буфера типа u8:

use std::ptr; fn main() { let mut buf = [0u8; 16]; let ptr = buf.as_mut_ptr().wrapping_add(3) as *mut f64; unsafe { ptr::write_unaligned(ptr, 3.14f64); } let value = unsafe { ptr::read_unaligned(ptr) }; println!("{}", value); }

Результат выполнения кода:

3.14

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

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