有没有一种方法在锈病中用限制u64::max_value的范围填充vec?
fn main() {
let vals: Vec<u64> = (2..u64::max_value()).collect();
println!("{:?}", vals.len());
}编译器抛出:thread 'main' panicked at 'capacity overflow', src/liballoc/raw_vec.rs:777:5
发布于 2020-01-23 15:07:10
我想你的电脑有64位的架构。这意味着它最多可以寻址2^64字节(在实践中,这是较少的)。
现在,由于u64的大小是8个字节,所以您正在尝试保留8 * 2^64字节。您的计算机甚至无法处理这么大的字节!
另外,您还试图在RAM中分配数百万兆字节。这不是一个合理的记忆量。
std库中恐慌的行如下:
let alloc_size = capacity.checked_mul(elem_size).unwrap_or_else(|| capacity_overflow());它验证容量(项目数)乘以元素的大小(如我所说的8个字节)是否溢出。这是代表我以前推理的编程方法。
发布于 2020-01-23 14:58:50
不是的。
u64::max_value()是一个巨大的数字。你没那么多记忆。没人知道。
https://stackoverflow.com/questions/59881352
复制相似问题