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.