ABA


"ניהול זיכרון ב ++C וב C"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #5317 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 5317
avi885

   15:30   08.03.03   
אל הפורום  
  ניהול זיכרון ב ++C וב C  
 
   הרבה פעמים אני נתקל במושג זה בכל הקשור ל CPP אבל לא ראיתי עוד דוגמא לכך.
ברוב הדוגמאות שראיתי אין כל התיחסות לכך. מגדירים משתנים ומחלקות, פותחים אוביקטים פונים לפונקציות והתוכנית עובדת.

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

תודה לעונים ואם הנושא רחב מדי אנא הפנו אותי למקורות מתאימים באינטרנט.

תודה


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  תשובה לשאלות שלך: Dudenland 08.03.03 15:51 1
  ניהול זכרון הוא בעל משמעות רק כשמקצים דינאמית dryice 08.03.03 17:08 2
     הקצאה דינמית avi885 09.03.03 01:07 3
         לכל תהליך(ולמעשה גם לכל חוט) יש מחסנית משלו dryice 09.03.03 10:51 4
             תודה רבה! avi885 09.03.03 11:43 5

       
Dudenland

   15:51   08.03.03   
אל הפורום  
  1. תשובה לשאלות שלך:  
בתגובה להודעה מספר 0
 
   1. לא כל תוכנית זקוקה למערכת ניהול זיכרון. תוכניות פשוטות, כמו אלו שעושים בביה"ס ממש לא משתמשות בזה. אבל ישנן תוכניות, שבהן השימוש בזיכרון, אם בצורה סטאטית, ואם בצורה דינאמית, גדול מאוד. דוגמה לכך, הוא השימוש בערימה, כאשר מקצים זיכרון באופן דינאמי, לפוינטרים מסוגים שונים וכו'.

2. ב- ++C, כאשר מחלקה כוללת בתוכה גם פוינטרים שמוקצים באופן דינאמי (ב-Constructor), יש לדאוג ל-Destructor חדש, שיפנה את הזיכרון המשומש. בצורה שכזאת, אבייקט שמקצה זיכרון, "יבטל" את ההקצאה בסיום שימושו.

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   17:08   08.03.03   
אל הפורום  
  2. ניהול זכרון הוא בעל משמעות רק כשמקצים דינאמית  
בתגובה להודעה מספר 0
 
   כאשר כל ההקצאות מתבצעות באופן אוטומטי על המחסנית הם גם משוחררת
באותו אופן.

כאשר מתחילים להקצות זכרון לבד, בעזרת malloc או new
צריך לזכור לשחרר, את הזכרון.

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

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

ניהול זכרון זה נושא דיי רחב, שמטפל בכל זה.


DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
avi885

   01:07   09.03.03   
אל הפורום  
  3. הקצאה דינמית  
בתגובה להודעה מספר 2
 
   אבל אם אין בעיה כאשר משתמשים בהקצאה אוטומטית מדוע בכלל יש צורך בהקצאה דינמית?
האם יש מחסנית אחת לכל התוכניות שרצות במחשב או לכל תוכנית מחסנית משלו?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   10:51   09.03.03   
אל הפורום  
  4. לכל תהליך(ולמעשה גם לכל חוט) יש מחסנית משלו  
בתגובה להודעה מספר 3
 
   יש צורך בהקצאה דינאמית כאשר צריך אחד מהבאים:
1) להקצות בלוק בזכרון בגודל לא ידוע בזמן קומפילציה,
2) להקצות כמויות גדולות מאוד של זכרון.
3) כשחייבים להקצות ולשחרר זכרון(גם בכמויות קטנות) ממגוון מקומות
בתוכנית.

(אוליי יש עוד מקרים פחות מהותיים שאני לא חושב עליהם כרגע)

DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
avi885

   11:43   09.03.03   
אל הפורום  
  5. תודה רבה!  
בתגובה להודעה מספר 4
 
   אף פעם לא השתמשתי בניהול זיכרון, מה שנקרא, "ידני".
נראה לי שיש צורך בלימוד רב של הנושא

חיפשתי קצת באינטרנט ויש הרבה על הנושא.

תודה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net