Note that BCPL defined a "dynamic data item" for what is now called an automatic variable (local, stack-allocated), not for heap-allocated objects, which is the current use of the term dynamic allocation.
When the program (executable or library) is loaded into memory, static variables are stored in the data segment of the program's address space (if initialized), or the BSS segment (if uninitialized), and are stored in corresponding sections of object files prior to loading.
A basic distinction is between a static global variable, which has global scope and thus is in context throughout the program, and a static local variable, which has local scope.
Object constants known at compile-time, such as string literals, are usually allocated statically.
In object-oriented programming, the virtual method tables of classes are usually allocated statically.