12.2.2.1 Default Allocation of Non-auto Variables
The compiler considers several categories of static
and
external
variables which all relate to the value which the variable
should contain at the time the program begins. That is, those that should be cleared at
program startup (uninitialized variables), those that should hold a non-zero value
(initialized variables), and those that should not be altered at all during program
startup (persistent variables). Those objects qualified as const
are
usually assigned an initial value since they are read-only. If they are not assigned an
initial value, they are grouped with the other uninitialized variables.
Data placed in RAM may be initialized at startup by copying initialized values from program memory.