Функция size_of_val
Функция size_of_val возвращает размер значения
в байтах. В отличие от функции size_of,
которая работает с типами, size_of_val
принимает ссылку на конкретное значение и может
вычислить его размер, даже если тип является
динамически изменяемым (например, срез [T]
или трейт-объект dyn Trait). Параметром
функция принимает ссылку на значение, размер
которого нужно узнать. Функция объявлена как
unsafe, поскольку её корректная работа
требует, чтобы переданная ссылка указывала на
валидное значение.
Синтаксис
unsafe fn size_of_val<T: ?Sized>(val: &T) -> usize
Пример
Давайте узнаем размер целого числа i32
через ссылку на него:
fn main()
{
let val: i32 = 42;
let size = unsafe { std::mem::size_of_val(&val) };
println!("{}", size);
}
Результат выполнения кода:
4
Пример
Давайте узнаем размер строкового среза, который является динамически изменяемым типом:
fn main()
{
let s: &str = "abcde";
let size = unsafe { std::mem::size_of_val(s) };
println!("{}", size);
}
Результат выполнения кода:
5
Пример
Давайте узнаем размер среза массива, содержащего
пять элементов i32:
fn main()
{
let arr = [1, 2, 3, 4, 5];
let slice: &[i32] = &arr;
let size = unsafe { std::mem::size_of_val(slice) };
println!("{}", size);
}
Результат выполнения кода:
20
Смотрите также
-
функция
size_of,
которая возвращает размер типа в байтах -
функция
align_of,
которая возвращает выравнивание типа в байтах -
функция
align_of_val,
которая возвращает выравнивание значения в байтах -
ключевое слово
unsafe,
которое позволяет выполнять небезопасные операции