Функция 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,
который записывает значение без чтения старого