TickCache::~TickCache()
{
   if (mTickCacheHead)
   {
      setCacheSize(0);
      freeHead(mTickCacheHead);
      mTickCacheHead = NULL;
   }
}
示例#2
0
// 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;
         }
      }
   }
}