| Post Reply | RetroFed Forum Forum Index » Rust |
| Author | Message | ||
|---|---|---|---|
SorteKanin
feddit.dk
SorteKanin@feddit.dkJoined: 2023-04-27 |
|
||
| 35 Original | |||
|
arendjr
programming.dev
arendjr@programming.dev Joined: 2024-02-26 |
|
||
| 2 | |||
SorteKanin
feddit.dk
SorteKanin@feddit.dkJoined: 2023-04-27 |
Vec::into_parts() returns a NonNull pointer, but isn’t the pointer allowed to be null if the vector is empty? I would expect that this method should be able to return a null pointer, but I’m probably missing something…
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. |
||
| 3 | |||
|
arendjr
programming.dev
arendjr@programming.dev Joined: 2024-02-26 |
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 ve...
Ah yes, that makes sense. Curious what it points to then when empty… |
||
| 2 | |||
SorteKanin
feddit.dk
SorteKanin@feddit.dkJoined: 2023-04-27 |
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. |
||
| 4 | |||
|
ExperimentalGuy
programming.dev
ExperimentalGuy@programming.dev Joined: 2023-07-25 |
Stable variadic functions is cool AF! |
||
| 6 | |||
|
fil
programming.dev
fil@programming.dev Joined: 2023-08-29 |
Ah yes, that makes sense. Curious what it points to then when empty…
|
||
| 2 | |||
|
TehPers
beehaw.org
TehPers@beehaw.org Joined: 2023-06-21 |
The extern variadic functions are pretty cool. What I'm actually most excited about is what just moved to beta, though. In particular, stabilization of both |
||
| 3 | |||
|
BB_C
programming.dev
BB_C@programming.dev Joined: 2023-07-06 |
Vec::into_parts() returns a NonNull pointer, but isn’t the pointer allowed to be null if the vector is empty? I would expect that this method should be able to return a null pointer, but I’m probably missing something…
To add to the other answers. Usually, the easiest way to answer such questions is to click on source. Then in this case, you would immediately see this comment:
|
||
| 2 | |||
| Post Reply |
Back to top |