为什么 usize::max_value() 在 64 位 Windows 上返回无符号 32 位整数的最大值?

Jon*_*ght 4 windows rust

文档指出

assert_eq!(usize::max_value(), 18446744073709551615);
Run Code Online (Sandbox Code Playgroud)

但是当我运行一个简单的测试时:

use std::usize;

fn main() {
    println!("{}", usize::max_value());
}
Run Code Online (Sandbox Code Playgroud)

它打印:4294967295

我的项目仅被初始化并添加了 2 行use std::usize;println!("{}", usize::max_value());没有任何其他更改。

我的输出rustc --version --verbose

assert_eq!(usize::max_value(), 18446744073709551615);
Run Code Online (Sandbox Code Playgroud)

删除 Rust 并使用 64 位 Windows rustup 安装程序重新安装后,我得到:

use std::usize;

fn main() {
    println!("{}", usize::max_value());
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行时rustup toolchain list它会打印一个项目:

rustc 1.41.1 (f3e1a954d 2020-02-24)
binary: rustc
commit-hash: f3e1a954d2ead4e2fc197c7da7d71e6c61bad196
commit-date: 2020-02-24
host: i686-pc-windows-msvc
release: 1.41.1
LLVM version: 9.0
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

She*_*ter 8

正如文档所说usize

该原语的大小是引用内存中任何位置所需的字节数。例如,在 32 位目标上,这是 4 个字节,在 64 位目标上,这是 8 个字节。

4294967295是 32 位整数的最大大小;这表明您正在针对 32 位平台进行编译。

您的输出证实了这一点rustc

host: i686-pc-windows-msvc

您已安装 32 位 Windows 编译器。64 位编译器说x86_64-pc-windows-*.

您可以将默认的 rustup 主机更改为 64 位:

rustup set default-host x86_64-pc-windows-msvc
Run Code Online (Sandbox Code Playgroud)

然后,您可能需要卸载并重新安装稳定工具链以将其切换到 64 位。

也可以看看: