这段代码给了我一个错误:
fn main() {
let x = [0 as u64; std::u64::MAX as usize];
println!("Hello, world! {}", std::u64::MAX);
}
Run Code Online (Sandbox Code Playgroud)
fn main() {
let x = [0 as u64; std::u64::MAX as usize];
println!("Hello, world! {}", std::u64::MAX);
}
Run Code Online (Sandbox Code Playgroud)
数组长度受isizetype 约束,type是平台大小的整数:
该
isize类型是带符号的整数类型,其位数与平台的指针类型相同。对象和数组大小的理论上限是最大值isize。这样可确保isize可用于计算指向对象或数组的指针之间的差异,并可寻址对象中的每个字节以及末尾的一个字节。
fn main() {
let x = [(); std::isize::MAX];
println!("Hello, world! {}", x.len());
}
Run Code Online (Sandbox Code Playgroud)
您的特定错误是因为在元素大小为非零时构造这么多元素的数组将需要大量内存,而不是给定平台实际支持的内存。
数组的大小是通过元素的大小乘以元素计数来计算的。您的数组具有类型u64(8个字节)的元素,并尝试具有2 个 64-1个元素,总计147.6艾字节。
在带有Rust 1.38的64位Linux上,最大大小似乎为2 47-1:
[0u8; (1usize << 47) - 1];
Run Code Online (Sandbox Code Playgroud)