תחשוב שאתה כותב מאלוק שמקצה בלוקים של מידע בHEAP. לכל בלוק אתה יכול להצמיד HEADER של כמה bytes עם מידע על גודל הבלוק ואם הוא תפוס או לא.
תחשוב שיש לך משהו כזה:
struct blockheader { int length; int used; }
|
עכשיו מישהו מבקש הקצאה של מאלוק בגודל 100 bytes..
אני מקצה 100 + גודל blockheader, ומעדכן את פרטי הבלוק.
מחזיר ליוזר את הכתובת + גודל blockheader והוא מבחינתו מקבל 100 bytes.
בפועל הוקצה קצת יותר מקום לטובת הHEADER.
שאתה קורא ל FREE על כתובת מסויימת, אתה מחסיר מהכתובת את הגודל של blockheader ויודע כמה לשחרר(לא כל אימפלמטציה תחזיק גודל, יהיו כאלה שיהיו להם בלוקים בגודל קבוע ולשחרר זכרון זה לסמן את הבוליאני used כ false.