当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust size_of_val_raw用法及代码示例


本文简要介绍rust语言中 Function std::mem::size_of_val_raw 的用法。

用法

pub unsafe fn size_of_val_raw<T>(val: *const T) -> usize where    T: ?Sized,

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

这通常与size_of::<T>().然而,当T no statically-known 大小,例如,切片slice或一个特质对象, 然后size_of_val_raw可用于获取dynamically-known 大小。

安全性

只有在以下条件成立时,才能安全调用此函数:

  • 如果 TSized ,则此函数始终可以安全调用。
  • 如果没有大小的尾巴T是:
    • a slice,那么切片尾部的长度必须是一个初始化的整数,并且切片尾部的大小全部值(动态尾部长度 + 静态大小前缀)必须适合isize.
    • a 特质对象,那么指针的 vtable 部分必须指向通过取消大小强制转换获得的有效 vtable,并且该 vtable 的大小全部值(动态尾部长度 + 静态大小前缀)必须适合isize.
    • (不稳定)extern type ,则此函数始终可以安全调用,但可能会出现Panics或返回错误值,因为外部类型的布局未知。这与对具有 extern 类型尾部的类型的引用的 size_of_val 的行为相同。
    • 否则,保守地不允许调用该函数。

例子

#![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) });

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Function std::mem::size_of_val_raw。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。