【发布时间】:2022-09-27 15:41:13
【问题描述】:
我有以下示例代码:
let vector_1 = vec![1, 2, 3];
let vector_2 = vec![4, 5, 6];
{
let vector_1_iter = vector_1.iter();
}
{
let chained = vector_1.iter().chain(vector_2.iter());
}
{
let vector_combined = vec![vector_1, vector_2];
let flatten = vector_combined.iter().flatten();
}
我想知道vector_1_iter 的大小,以字节为单位,以字节为单位。如果我要找到vector_1 和vector_2 的大小,我只需将向量的长度乘以i32 的字节数。但是,我不确定将向量转换为迭代器后大小是否会改变。与链接和展平相同,它们不会占用等于数组的整个长度乘以每种数据类型的大小的相同大小吗?
-
为什么需要尺寸?还,\"我只取向量的长度并乘以 i32 的字节\"是不正确的。那只是内容的记忆;它周围有一些控制结构(据我所知)占用
3*usize的空间。并且可能会丢失填充。从技术上讲,即使那不是真的,实际尺寸一个向量是它的预订的大小,不一定需要与其内容相匹配。如您所见:它很复杂。 -
std::mem::size_of()可以帮你搞定一些的信息,但它不会告诉你全部的大小包括堆分配,绝对不是任何分配器开销。如果你edit你的问题告诉我们你想用这个号码做什么,也许我们可以给你一个体面的答案。 -
如果您对堆分配感兴趣,可能想看看 valgrind 的地块或一些ad hoc techniques。
标签: vector rust iterator flatten chaining