An apparatus for dynamically allocating blocks of memory according to claim 9, wherein the skip list defines a plurality of nodes, at least some of which define a plurality of elements having different levels, wherein each node is associated with a base memory address corresponding to a free memory block of a predetermined size, each element including a plurality of first and second pointer pairs,