The techniques used for dynamic storage allocation depend on whether space is deallocated implicitly or explicitly. For explicit deallocation, blocks of fixed or variable size can be allocated and linked in a list, allowing quick allocation and deallocation with low overhead. When blocks are frequently allocated and freed, storage can become fragmented, making it difficult to allocate larger blocks. Reference counting and marking techniques can be used for implicit deallocation, with reference counting best when there are no cyclic references and marking involving temporarily freezing pointers to determine reachable blocks.