isize 和 usize 可以不同吗? 它们都可以用于内存大小、索引、偏移量。
因为 usize 用于数组,为什么我们不只使用 usize
我是 Rust 的新手,所以这可能是一个基本问题。
更新:在 32 位系统上它们都是 32 位长,在 64 位系统上它们都是 64 位长。不考虑标志。
最佳答案
在 32 位系统上,isize
与i32
相同和 usize
与u32
相同.在 64 位系统上,isize
与i64
相同和 usize
与u64
相同.
-
usize
不能为负数,通常用于内存地址、位置、索引、长度(或大小!)。 -
isize
可以为负数,通常用于偏移地址、位置、索引或长度。
在所有当前支持的架构中usize
和 isize
大小彼此相同,但情况可能并非总是如此!包含 CHERI 的新型指令集需要在指针中包含元数据以跟踪来源。在 64 位系统上,此方案需要额外的 64 位元数据,使指针成为 128 位,但指针偏移量仍然可以是 64 位。
有一些关于 CHERI 支持将如何影响 Rust 的讨论 here .
关于rust - 在rust中 isize 和 usize 可以不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55506647/