In a block-structured language, storage required by a block (procedure) is allocated on entry to the block and is de-allocated at the exit from the block. Since blocks are nested, storage can be allocated on a last in first out basis on a stack, and the area of the stack containing data for a particular block is called the stack frame for the block.