The documentation says usize
is
Operations and constants for pointer-sized unsigned integers.
In most cases, I can replace usize
with u32
and nothing happens. So I don't understand why we need two types which are so alike.
Warning: This answer is legacy for Rust, usize
have been redefined as "can hold any memory location", see 95228 for very deep reasoning, TL;DR: a pointer is not just a number.
As the documentation states usize
is pointer-sized, thus its actual size depends on the architecture you are compiling your program for.
As an example, on a 32 bit x86 computer, usize = u32
, while on x86_64 computers, usize = u64
.
usize
gives you the guarantee to be always big enough to hold any pointer or any offset in a data structure, while u32
can be too small on some architectures.
Adding to @Levans' answer,
The size of usize
is depended on how much size it takes to reference any location in memory.
on a 32 bit target usize
is 4 bytes and on a 64 bit target usize
is 8 bytes