Static links refer to the arrangement of procedures in programs when viewed statically. In other words, they are nesting of procedures one inside the other. A static link holds a reference to a procedure within which a procedure is contained.
For example:
main {
someFunc() // Invocation
someFunc {
// some code for this function
anotherFunc() // Invocation
}
anotherFunc {
// some code for this function
}
}
Since someFunc is contained inside main, a static link to main exists in someFunc. Same is the case for anotherFunc
Dynamic links always refer to the caller of the function, as opposed to static links which refer to scope container.
Since main is invoking someFunc(), so dynamic link in someFunc would hold reference to caller i.e. main
For anotherFunc(), since it is called by someFunc, so dynamic link in anotherFunc would hold reference to caller i.e. someFunc
Reference:
https://www.cs.nmsu.edu/~rth/cs/cs471/f00/ARIs.html