הרחבה :
מערכת ההפעלה מחזיקה טבלאת זיכרון : בטבלא הזו שמורים הנתונים הבאים: * כתובת הזיכרון הפיזי של תחילת הבלוק * כתובת הזיכרון הלוגי במרחב הזיכרון של תחילת הבלוק * גודל הבלוק וכ``ו... כאשר אתה דורש בלוק בתכנית מסויימת - היא שומרת לעצמה את הנתונים הרלוונטיים(כתובת התחלה, מ``ס בייטים, SIZEOF) וכאשר אתה עושה FREE - היא נותנת פקודה מתאימה למערכת ההפעלה (וזה כהסבר למה שכתבתי בתגובה הקודמת) כאשר אתה עושה MALLOC - אתה למעשה משתמש בפונקציה שדורשת ממערכת ההפעלה בלוק זיכרון לוגי ופיזי ביחד, ללא הפרדה בין הלוגי לפיזי וכאשר אתה עושה FREE - כנ``ל - אתה משחרר גם את הלוגי וגם את הפיזי אבל אם אתה עובד ישירות מול מערכת ההפעלה - כמו ב API`S של ווינדוז - אתה יכול לבקש קודם זיכרון לוגי ואח``כ זיכרון פיזי - לא בהכרח באותו הגודל (אם כי הפיזי לא יהיה יותר גדול) וכנ``ל יכול לשחרר אותם בנפרד - קודם את הפיזי ואח``כ את הלוגי המימוש של MALLOC, CALLOC ו REALLOC בכל מערכת הפעלה שונה לפי סוג הפקודה של אותה המערכת אבל כמתכנת ב C - זה ``שקוף`` לך - אתה לא יודע איזו פקודה של מערכת הפעלה ניתנה בפועל לסיכום : פקודות ה MALLOC וה FREE ממומשות בצורה שונה בכל מערכת הפעלה - כאשר כל תכנית שומרת לעצמה את כתובת ההתחלה, גודל הבלוק וה SIZEOF של כל תא, וכאשר עושים FREE נשלחת פקודה למערכת ההפעלה שמשחררת את הבלוק הספציפי בגודל הספציפי - על פי הנתונים של כל תכנית אם יש לך שאלות נוספות - אני אשמח לעזור ולפרט יותר