Dynamic links are created by the order of function calls. An activation record (AR) has a link to the AR of its caller, which is always just below it on the run-time stack. Static links are set based upon the structure of the program. When a function is called, a dynamic link is created that points at its caller, and a static link is created that points at the subprogram in which it is declared. Dynamic scope is determined by subprogram calls. In an activation record, dynamic link points at its caller, static link points at its 'daddy', the subprogram in which it was declared. Because of the rules of scope, the static link can always be set. ---------------------------- Overloading of term static - Declarations handled by the compiler, i.e. compiler sets aside the memory, are called statically declared (or allocated) - Members of a class qualified as static are singular; they belong to the class, exist independent of objects of the class' type, and are shared by all objects instantiated from that class. - Static links on the run-time stack contain the address of the activation record for the subprogram in which the current subprogram is declared. - Static scope is designated by following static links. ------------------------------------------ Pass by value-result occurs when a value is placed in a register accessible by the called function, which, during the called function's execution accesses and may also replace the value in that register. * The caller then retrieves the (possibly) updated value from the register.