There are three main types of runtime storage management techniques used in compiler design:
Static allocation: In this technique, memory for all data objects is laid out at compile time. The position of an activation record in memory is fixed and determined during compilation.
Stack allocation: This technique manages run-time storage as a stack. A new activation record is pushed onto the stack for each execution of a procedure and popped when the activation ends.
Heap allocation: This method allocates and deallocates storage as needed at runtime from a data area known as the heap. It's used for dynamically allocating memory to variables and reclaiming it when the variables are no longer required.
Each of these techniques has its own advantages and use cases. Static allocation is simple but doesn't support recursion or dynamic data structures. Stack allocation supports recursion and allows for dynamic data structures. Heap allocation provides the most flexibility for dynamic memory management but requires more complex implementation.