Function std::mem::size_of_val_raw

const: unstable · source ·
pub unsafe fn size_of_val_raw<T>(val: *const T) -> usizewhere
    T: ?Sized,
🔬This is a nightly-only experimental API. (layout_for_ptr #69835)
Expand description

返回所指向的值的大小 (以字节为单位)。

这通常与 size_of::<T>() 相同。然而,当 T 没有静态已知大小时,例如切片 [T]trait 对象,则可以使用 size_of_val_raw 来获取动态已知大小。

Safety

仅在满足以下条件时,此函数才可以安全调用:

  • 如果 TSized,则调用该函数始终是安全的。
  • 如果 T 的未定义大小的尾部为:
    • slice,则切片尾部的长度必须是初始化的整数,并且 entire 值(动态尾部长度 + 静态大小的前缀) 的大小必须适合 isize

    • trait 对象,则指针的 vtable 部分必须指向通过取消大小调整强制获取的有效 vtable,并且 entire 值(动态尾部长度 + 静态大小的前缀) 的大小必须适合 isize

    • 一个不稳定的 外部类型,则此函数始终可以安全调用,但可能会 panic 或以其他方式返回错误的值,因为外部类型的布局未知。 这与带有外部类型尾部的类型的引用上的 size_of_val 行为相同。

    • 否则,保守地不允许调用此函数。

Examples

#![feature(layout_for_ptr)]
use std::mem;

assert_eq!(4, mem::size_of_val(&5i32));

let x: [u8; 13] = [0; 13];
let y: &[u8] = &x;
assert_eq!(13, unsafe { mem::size_of_val_raw(y) });
Run