Guest User

Untitled

a guest
Apr 19th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1. void* fbtMalloc(size_t size)
  2. {
  3.     if (freeMem == 0)
  4.     {
  5.         init();
  6.     }
  7.  
  8.     // aktueller Speicherbereich
  9.     MemBlock* tmp = freeMem;
  10.     // vorheriger Speicherbereich
  11.     MemBlock* prev = 0;
  12.  
  13.     while(tmp)
  14.     {
  15.         // teile Speicherbereich auf und alloziere einen
  16.         if (tmp->size > size + 2*sizeof(MemBlock) + 8)
  17.         {
  18.             // naechster Speicherbereich
  19.             // und zu allozierender Speicherbereich
  20.             MemBlock next;
  21.             if (tmp->next) 
  22.                 next = *(tmp->next);
  23.             else
  24.                 next = MemBlock();
  25.  
  26.             MemBlock* ptr = tmp;
  27.  
  28.             // naechster/neuer Speicherbereich
  29.             // und aktuallisiere Groesse vom neuen Speicherbereich
  30.             // und verkette naechsten Speicherbereich
  31.             tmp += (size + sizeof(MemBlock));
  32.             tmp->size = ptr->size - (size + sizeof(MemBlock));
  33.             *(tmp->next) = next;
  34.  
  35.             // aktuallisiere Groesse vom zu allozierenden Speicherbereich
  36.             // und markiere zu allozierenden Speicherbereich
  37.             ptr->size = size;
  38.             ptr->next = (MemBlock*)MAGIC_VALUE;
  39.  
  40.             // verkette vorherigen Speicherbereich, falls vorhanden
  41.             // ansonsten verschiebe Pointer von freeMem auf neuen Speicherbereich
  42.             if (prev)
  43.                 prev->next = tmp;
  44.             else
  45.                 freeMem = tmp;
  46.  
  47.             // gebe allozierten Speicherbereich zurueck
  48.             return (void*)ptr;
  49.         }
  50.         // alloziere Speicherbereich
  51.         else if (tmp->size > size)
  52.         {
  53.             MemBlock* ptr = tmp;
  54.             tmp = tmp->next;
  55.             ptr->size = size;
  56.             ptr->next = (MemBlock*)MAGIC_VALUE;
  57.  
  58.             if (prev)
  59.                 prev->next = tmp;
  60.             else
  61.                 freeMem = tmp;
  62.  
  63.             return (void*)ptr;
  64.         }
  65.         prev = tmp;
  66.         tmp = tmp->next;
  67.     }
  68.  
  69.     return 0;
  70. }
Add Comment
Please, Sign In to add comment