gpt4 book ai didi

memory - Rust-对象的运行时内存大小

转载 作者:行者123 更新时间:2023-12-03 11:34:08 25 4
gpt4 key购买 nike

我试图弄清楚如何获得使用rust 对象的大小(以字节为单位),其中在编译时可能知道或可能不知道大小。我希望能够在程序运行时的任何时候获取字节数。这是一个例子。

let mut v: Vec<SomeStruct> = Vec::new();

loop {

v.push(get_some_struct());

print_consumed_memory_of_vec(&v);
}
我想有一个比 mem::size_of<SomeStruct> * v.len() b/c更通用的方法,因为通常情况下您有一个特征或在编译时不知道大小的东西。
有人有什么想法吗?

最佳答案

使用 std::mem::size_of_val 来获取切片的大小:

println!("The useful size of `v` is {}", size_of_val(&*v));
笔记:
  • 您必须取消引用Vec<T>以获得&[T],因为Vec本身的大小仅是三个指针的大小,但实际上您想要数据指针所指的切片的大小。如果您已经拥有&[T]&dyn Trait,或者通常具有任何&U,而U是您想知道其大小的东西,那么这不是问题。
  • 这为您提供了Vec的填充部分的大小;也就是说,与size_of::<T>() * v.len()相同。如果v有未使用的容量,则size_of_val(&*v)不会反射(reflect)出来。没有通用的方法可以告诉您分配的大小。您必须自己对此进行跟踪。例如,对于Rc<T>而不是Vec<T>,这也有所不同-Rc将其引用计数存储在与T相同的分配中,但是如果您编写size_of_val(&*rc),则不会计数这些引用计数。
  • 关于memory - Rust-对象的运行时内存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62613488/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com