Home Segments Index Top Previous Next

564: Mainline

The following sequence shows how the stack grows and shrinks. The first diagram in the sequence shows the stack just before a function is called:

*---------*---------*---------*---------*---------*---------* 
| In use  | In use  | In use  | Unused  | Unused  | Unused  | 
*---------*---------*---------*---------*---------*---------* 

Next, the stack grows to accommodate parameters and local variables as a function is called; in the diagram, two chunks are pushed on to the end of the stack, overwriting unused memory:

                                  Reserved for a 
                                new function call 
                                        | 
                                        v 
                               ------------------- 
*---------*---------*---------*---------*---------*---------* 
| In use  | In use  | In use  | In use  | In use  | Unused  | 
*---------*---------*---------*---------*---------*---------* 

Next, the stack shrinks when the function returns; memory previously used for parameters and local values becomes unused and ready for reuse:

                                 Ready for reuse 
                                        | 
                                        v 
                               ------------------- 
*---------*---------*---------*---------*---------*---------* 
| In use  | In use  | In use  | Unused  | Unused  | Unused  | 
*---------*---------*---------*---------*---------*---------* 

Finally, the stack grows again to accommodate the next function call, and memory previously occupied is overwritten; the new function call happens to require three chunks of memory:

                                                  Reserved for a 
                                                new function call 
                                                       | 
                                   Overwritten         | 
                                        |              | 
                                        v              | 
                               -------------------     v 
                               ----------------------------- 
*---------*---------*---------*---------*---------*---------* 
| In use  | In use  | In use  | In use  | In use  | In use  | 
*---------*---------*---------*---------*---------*---------*