Languages such as Ada, which allow concurrent execution of program units, pose additional storage allocation problems in that each concurrently executing unit (tasks in Ada) requires a stack-like storage.
One approach is to use a heap. Still another solution is to use a data structure called a cactus stack.