logo
 
Implementing Subprograms
CptS 355 - Programming Language Design
Washington State University
Home
Notices
Calendar
Homework
Syllabus
Resources
People

Using the Stack to pass parameters

  • visual depiction of run-time storage
  • external
  • heap
    • freelist - list of free space
    • on allocation - memory manager finds space and marks it as used changing freelist
    • on deallocation - memory manager marks space as free changing freelist
    • memory fragmentation - memory fragments into small blocks over lifetime of program
    • garbage collection - coalesce fragments, possibly moving objects (must be careful of pointers when moving!)
  • stack
    • clean and efficient support for nested functions and recursion
    • central concept is stack frame (also called activation record), includes
      • visual depiction of frame external
      • parameters
      • return address - where to begin execution when function exits
      • dynamic link - pointer to caller's stack frame
      • static link - pointer to lexical parent (for nested functions)
      • return value - where to put the return value
      • local variables
      • local work space - for temporary storage of results
    • function call - push stack frame
    • function exit - pop stack frame
    • visual depiction of stack calls
    • external
  • example
    int x;                 /* static storage */
    
    void main() {
       int y;              /* dynamic stack storage */
       char *str;          /* dynamic stack storage */
      
       str = malloc(100);  /* allocates 100 bytes of dynamic heap storage */
    
       y = foo(23);
       free(str);          /* deallocates 100 bytes of dynamic heap storage */
    }                      /* y and str deallocated as stack frame is popped */
    
    int foo(int z) {       /* z is dynamic stack storage */
       char ch[100];     /* ch is dynamic stack storage */
    
       if (z == 23) foo(7);
       
       return 3;           /* z and ch are deallocated as stack frame is popped,
                              3 put on top of stack  */
    }
    
  • at the start of the program external
  • after the first call to foo external
  • after the second call to foo external

Source of Information

These lecture notes are based on Chapter 10 in "Programming Languages, 6ed" by Robert Sebesta and Chapter 3 in "Programming Language Concepts and Paradigms" by David Watt.
                                                                                                                                                                                                                                                                                                                                             
  (c) 2003 Curtis Dyreson, (c) 2004 Carl H. Hauser           E-mail questions or comments to Prof. Carl Hauser