首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用u64::max_value()填充Vec

如何用u64::max_value()填充Vec
EN

Stack Overflow用户
提问于 2020-01-23 14:56:01
回答 2查看 352关注 0票数 0

有没有一种方法在锈病中用限制u64::max_value的范围填充vec?

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-23 15:07:10

我想你的电脑有64位的架构。这意味着它最多可以寻址2^64字节(在实践中,这是较少的)。

现在,由于u64的大小是8个字节,所以您正在尝试保留8 * 2^64字节。您的计算机甚至无法处理这么大的字节!

另外,您还试图在RAM中分配数百万兆字节。这不是一个合理的记忆量。

std库中恐慌的行如下:

代码语言:javascript
复制
let alloc_size = capacity.checked_mul(elem_size).unwrap_or_else(|| capacity_overflow());

它验证容量(项目数)乘以元素的大小(如我所说的8个字节)是否溢出。这是代表我以前推理的编程方法。

票数 5
EN

Stack Overflow用户

发布于 2020-01-23 14:58:50

不是的。

u64::max_value()是一个巨大的数字。你没那么多记忆。没人知道。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59881352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档