1. Static Allocation : memory allocated statically (at compile time) and survives the whole program run. i.e., the memory is created as part of the application binary which resides on disk and when a process is created this memory gets mapped on to physical memory, Used for static/global variables and string literals etc. in C.
2. Stack allocation : memory is to be alocated is decided at compile time but is actually created at runtime. For this reason, stack space cannot change dynamically. Used for creating local variables in C. Some platform restrict the stack space for programs, like in Ubuntu, 8MB is the default limit and to use more we have to change the limit using "ulimit -s <newvalue in KB>".
3. Heap allocation: memory is created on heap. Heap can grow dynamically (even stack can grow dynamically, but while stack grows only when functions are called and in units of activation record size), and hence used for dynamic memory allocation like dynamic arrays, malloc etc.
Run a process on linux, get its pid - say 1731. Now doing
cat /proc/1731/maps
gives the memory maps of it.