rust - 在rust中 isize 和 usize 可以不同吗?

标签 rust

isize 和 usize 可以不同吗? 它们都可以用于内存大小、索引、偏移量。

因为 usize 用于数组,为什么我们不只使用 usize

我是 Rust 的新手,所以这可能是一个基本问题。

更新:在 32 位系统上它们都是 32 位长,在 64 位系统上它们都是 64 位长。不考虑标志。

最佳答案

在 32 位系统上,isizei32相同和 usizeu32相同.在 64 位系统上,isizei64相同和 usizeu64相同.

  • usize不能为负数,通常用于内存地址、位置、索引、长度(或大小!)。
  • isize 可以为负数,通常用于偏移地址、位置、索引或长度。

在所有当前支持的架构中usizeisize大小彼此相同,但情况可能并非总是如此!包含 CHERI 的新型指令集需要在指针中包含元数据以跟踪来源。在 64 位系统上,此方案需要额外的 64 位元数据,使指针成为 128 位,但指针偏移量仍然可以是 64 位。

有一些关于 CHERI 支持将如何影响 Rust 的讨论 here .

关于rust - 在rust中 isize 和 usize 可以不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55506647/

相关文章:

rust - 你如何编译一个 Rust 库来定位 asm.js?

rust - 是否可以在 Rust 中返回借用或拥有的类型?

rust - "Safe"奇数大小对齐向量的 SIMD 算法?

rust - 在 Rust 的 HashMap<(String, usize), f64> 中查找键

rust - 在Rust中检查路径组件的权限

rust - 如何创建一个构建器,该构建器采用为 `&str` 的切片实现 AsRef 的类型?

rust - 我可以在类型转换期间重用结构体字段而不调用 .clone() 吗?

rust - 如何在 Rust 中查找两个字符串是否具有公共(public)字符

collections - 如果元素可以转换,为什么不能使用 .into() 转换容器?

serialization - 我如何反序列化为特征,而不是具体类型?