rust-lang / nomicon

The Dark Arts of Advanced and Unsafe Rust Programming
https://doc.rust-lang.org/nomicon/
Apache License 2.0
1.82k stars 262 forks source link

"Working With Uninitialized Memory" makes overly broad claims #435

Open RalfJung opened 9 months ago

RalfJung commented 9 months ago

Here, the Nomicon claims

All runtime-allocated memory in a Rust program begins its life as uninitialized. In this state the value of the memory is an indeterminate pile of bits that may or may not even reflect a valid state for the type that is supposed to inhabit that location of memory. Attempting to interpret this memory as a value of any type will cause Undefined Behavior.

That's not true; there are types that allow reading a value from uninitialized memory for some or all of their bytes: MaybeUninit is the obvious example, and more generally unions with a () field (or even all unions, details are TBD). Also, padding bytes are allowed to be uninitialized.