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.
As an example, on a 32 bit x86 computer, usize = u32, while on x86_64 computers, usize = u64.