. Requires co-operation between user program and run time system
. Run time system needs to know when a block is no longer in use
. Implemented by fixing the format of storage blocks
Implicit deallocation requires cooperation between the user program and run time package, because the latter needs to know when a storage block is no longer in use. This cooperation is implemented by fixing the format of storage blocks.
For implicit deallocation it is possible that we periodically make the garbage collector go through each and every link that has been allocated and then try to figure out which are no longer needed. But for efficiency we want that instead of globally considering all the accessible links there are some local tests that can be run on each block to see if it can be deallocated. For this we fix the format of the storage blocks and try to store some extra information to help us more efficiently find whether any given block needs to be deallocated. In spite of these measures, a lot of time is generally wasted on deallocation. For example in Lisp, for sufficiently large programs, around 30 percent of the execution time is spent on garbage collection. While garbage collection is going on, no other execution work can be going on as all links have to be frozen for integrity reasons. So garbage collection greatly slows down execution time, slowing down the production cycle.