`usize`和`u32`有什么区别?

Vay*_*ayn 50 rust

文档说的usize

指针大小的无符号整数的操作和常量.

在大多数情况下,我可以替换usize,u32没有任何反应.所以我不明白为什么我们需要两种类似的类型.

Lev*_*ans 82

由于文档状态usize是指针大小的,因此它的实际大小取决于您编译程序的体系结构.

例如,在32位x86计算机上,usize = u32在x86_64计算机上,usize = u64.

usize保证总是足够大以容纳数据结构中的任何指针或任何偏移,而u32在某些体系结构上可能太小.

  • 取决于你想做什么,如果在内存结构中保存索引,是的.对于普通数字,"u32"通常很好.标准库在适当的时候总是使用`usize`,而rust会不会将`u32`静默地转换为'usize`,所以你会看到它们何时需要它们. (11认同)
  • 我应该总是使用"usize"类型来保证安全吗? (3认同)
  • 请注意,如果您对确定性行为或序列化感兴趣,`usize` 可能会引起混淆。 (3认同)
  • 如果您在嵌入式系统上工作,`u32'也可能太大了,Rust作为一种系统语言被设计为可以很好地与之配合使用。如果u32总是太小,那么该语言可能会被设计为将u32静默转换为usize。 (2认同)

Mar*_*rty 5

添加到@Levans 的回答中,

的大小usize取决于引用内存中的任何位置所需的大小。

在 32 位目标上usize为 4 个字节,在 64 位目标上usize为 8 个字节

  • 这个答案与@Levans 的答案有何不同? (2认同)