שאלה מי שעונה עליה תותח על

yair24

Member
שאלה מי שעונה עליה תותח על

בשפת סי כשאני משתמש במלוק (malloc) נגיד אני מקצה זיכרון למערך של 40 int ובסוף אני עושה לו free איך המחשב יודע לפנות את ה 40 כלומר איך הוא יודע שהמערך הוא בגודל 40 איפה הוא שומר את הנתון הזה? ובבקשה לא לשכוח להיכנס לאתר שלי הוא נועד לעזור לסטודנטים מתחילים ומתקדמים תודה מראש יאיר
 

ihovav

New member
תשובה (אני מקווה שמספקת )

ישנה טבלאת זיכרון במערכת ששומרת את כתובת התחלת כל בלוק, גודל הבלוק, לאיזה תכנית הוא שייך ועוד... כאשר אתה מבצע FREE - כל המידע ששמור על אותו הבלוק נמחק והוא נהיה חופשי ומאושר... הטבלא הזו אינה נגישה למתכנת - עד כמה שאני יודע - אבל אם אתה רוצה לשלוט בצורה טובה יותר על ניהול הזיכרון או לנהל אותו בעצמך - ואתה עובד בסביבת וויזואל סטודיו - אתה יכול ישירות להשתמש ב API`S של ווינדוז - אבל זה מסובך...
 

ihovav

New member
הרחבה :

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