עבור לתוכן

הכרזה על מערך בתוך פונ' והחזרה של מצביע אליו

Featured Replies

פורסם

הזכרון ממופה כשמערכת ההפעלה מחליטה למפות אותו.

כשאתה רק מפעיל את התכנית, מערכת ההפעלה ממפה את הזכרון עבור הקוד של התכנית, המחסנית והמשתנים הסטטיים והגלובאליים.

כשאתה עושה malloc, מערכת ההפעלה ממפה עבורך עוד זכרון (רק אם צריך, כי יכול להיות שכבר יש זכרון שממופה אבל לא בשימוש, ואז מערכת ההפעלה רק תדאג להקצות מקום שם, בלי צורך למפות אותו מחדש). גם אחרי שעושים free, הזכרון באותו המקום לא בהכרח "משתחרר", כלומר ייתכן בהחלט שהוא עדיין ממופה לזכרון פיזי כלשהו. מערכת ההפעלה הרי לא ממפה ביט לביט, היא ממפה בלוקים גדולים של זכרון, כך שאם אתה משחרר חלק מהזכרון שהקצית באמצעות free, אז עדיין חלק מהבלוק עדיין יהיה בשימוש, ולכן מערכת ההפעלה תשאיר אותו ממופה לזכרון הפיזי.

כמו שאמרתי, המחסנית מנוהלת לחלוטין ע"י התכנית, ולא ע"י מערכת ההפעלה. בעליית התכנית, מערכת ההפעלה ממפה את הזכרון של כל המחסנית, ומשם המחסנית באחריותה של התכנית בלבד. כפי שרשמתי בהודעה קודמת, כשיוצאים מהפונקציה, הזכרון עבור המשתנים המקומיים של הפונקציה לא "משתחרר". הדבר היחיד שקורה הוא שהמצביע של המחסנית חוזר למצב שבו הוא היה לפני הכניסה לפונקציה, וזהו.

פורסם
  • מחבר

אוקי נראה לי שהבנתי, אתה אומר שמ.ה מקצה זיכרון מסויים (מחסנית) לשימוש התוכנית , והתוכנית יכולה לגשת לכל מקום בזיכרון הנ"ל בלי קשר אם הכריזה על משתנים באותו כתובות?

זאת אומרת שהבעייה עם הכתובת 5 זה המספר עצמו? כלומר אם הייתי כותב מספר אחר יכול להיות שהוא היה מפנה במקרה לכתובת של זיכרון שמופה למחסנית ואז לא הייתה שגיאה?

פורסם
  • מחבר

תודה

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים