this post was submitted on 01 Oct 2026
35 points (100.0% liked)
Rust
8322 readers
25 users here now
Welcome to the Rust community! This is a place to discuss about the Rust programming language.
Wormhole
Credits
- The icon is a modified version of the official rust logo (changing the colors to a gradient and black background)
founded 3 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
It's a good question. I believe Vec uses a near-zero pointer but not actually a null pointer for an empty Vec. I think part of the reason is that it makes for better optimisation of Option<Vec> which can then have the same size as Vec with the pointer being null signifying None.
Another big reason is that references are guaranteed not to be null and you can get a &[T] from an empty vec and that reference can't be null. Even in a non empty vec you need to consider this if T is zero sized.
Ah yes, that makes sense. Curious what it points to then when empty…
I looked it up, it's a pointer equal to the alignment of the type. So usually some small power of two.
Vec::<u8>::new().as_ptr() = 0x0000000000000001playground