Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void* fbtMalloc(size_t size)
- {
- if (freeMem == 0)
- {
- init();
- }
- // aktueller Speicherbereich
- MemBlock* tmp = freeMem;
- // vorheriger Speicherbereich
- MemBlock* prev = 0;
- while(tmp)
- {
- // teile Speicherbereich auf und alloziere einen
- if (tmp->size > size + 2*sizeof(MemBlock) + 8)
- {
- // naechster Speicherbereich
- // und zu allozierender Speicherbereich
- MemBlock next;
- if (tmp->next)
- next = *(tmp->next);
- else
- next = MemBlock();
- MemBlock* ptr = tmp;
- // naechster/neuer Speicherbereich
- // und aktuallisiere Groesse vom neuen Speicherbereich
- // und verkette naechsten Speicherbereich
- tmp += (size + sizeof(MemBlock));
- tmp->size = ptr->size - (size + sizeof(MemBlock));
- *(tmp->next) = next;
- // aktuallisiere Groesse vom zu allozierenden Speicherbereich
- // und markiere zu allozierenden Speicherbereich
- ptr->size = size;
- ptr->next = (MemBlock*)MAGIC_VALUE;
- // verkette vorherigen Speicherbereich, falls vorhanden
- // ansonsten verschiebe Pointer von freeMem auf neuen Speicherbereich
- if (prev)
- prev->next = tmp;
- else
- freeMem = tmp;
- // gebe allozierten Speicherbereich zurueck
- return (void*)ptr;
- }
- // alloziere Speicherbereich
- else if (tmp->size > size)
- {
- MemBlock* ptr = tmp;
- tmp = tmp->next;
- ptr->size = size;
- ptr->next = (MemBlock*)MAGIC_VALUE;
- if (prev)
- prev->next = tmp;
- else
- freeMem = tmp;
- return (void*)ptr;
- }
- prev = tmp;
- tmp = tmp->next;
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment