TickCache::~TickCache() { if (mTickCacheHead) { setCacheSize(0); freeHead(mTickCacheHead); mTickCacheHead = NULL; } }
// Frees the block of memory that the ptr is a part of. // If ptr is not within a previously allocated block, // the behavior is undefined. void myFree(void *ptr) { if (ptr == NULL) { return; } header *headerBefore = getBeforePointerFromPointer(ptr); header *headerPointer = getHeaderPointerFromBefore(headerBefore); if (headerPointer == head) { freeHead(headerPointer); } else { if (headerBefore->freeFlag == TRUE) { // If the previous and next blocks are free, I need to // combine all of them if (headerPointer->next->freeFlag == TRUE) { headerBefore->size += headerSize + headerPointer->size + headerSize + headerPointer->next->size; headerBefore->next = headerPointer->next->next; } // If only the previous block is free, I need to combine it // and the current block else { headerBefore->size += headerSize + headerPointer->size; headerBefore->next = headerPointer->next; } } else { // If only the next block is free, I need to combine it // and the current block if (headerPointer->next->freeFlag == TRUE) { headerPointer->size += headerSize + headerPointer->next->size; headerPointer->freeFlag = TRUE; headerPointer->next = headerPointer->next->next; } // If the previous and next blocks are not free, I do not // need to combine else { headerPointer->freeFlag = TRUE; } } } }