use std::mem;
impl Solution {
pub fn find_substring(s: String, words: Vec<String>) -> Vec<i32> {
let mut result: Vec<i32> = vec![23, 234, 243, 23, 26, 24, 2345];
println!("{}", mem::size_of_val(&result));
result
}
}
Run Code Online (Sandbox Code Playgroud)
但是我的 println! 得到了 24。我不确定 24 字节是指什么。我想知道如何获得结果向量消耗的总内存,包括存储值的字节以及数据结构本身所需的任何额外字节。我怎样才能找到那个?
24 字节(在 64 位平台中)仅用于结构字段的大小:指针、长度、容量。
没有通用的方法来跟踪所有内部指针并确定内存中使用的“真实”空间。这种空间甚至没有一个明显的通用定义(如果一个字段是一个,你会怎么做Rc?)。
可能的是定义一个函数来获取向量使用的大小,您可以通过添加容量乘以包含的元素类型的大小来获得该大小:
pub fn size_of_vec<T>(vec: &Vec<T>) -> usize {
std::mem::size_of_val(vec) + vec.capacity() * std::mem::size_of::<T>()
}
fn main() {
let mut result: Vec<i32> = vec![23, 234, 243, 23, 26, 24, 2345];
dbg!(size_of_vec(&result));
}
Run Code Online (Sandbox Code Playgroud)
当然,如果T类型是指堆保留空间,这个size_of_vec函数就不能说明了。
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |