C has three types of storage: automatic, static and allocated.
Variable having block scope and without static specifier have
automatic storage duration.
Variables with block scope, and with static specifier have static
scope. Global variables (i.e, file scope) with or without the the
static specifier also have static scope.
Memory obtained from calls to malloc(), alloc() or realloc() belongs
to allocated storage class.