ABA


"יש דרך לדעת האם כל הזכרון שהקצאתי שוחרר?"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15289 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15289
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   19:50   25.04.09   
אל הפורום  
  יש דרך לדעת האם כל הזכרון שהקצאתי שוחרר?  
 
   סתם נגיד בשפת c..אני עושה די הרבה Malloc's והקצאות ודי מתבלבל בסוף מה כן צריך לשחרר מה לא..
אם אני מדבר על מבנה נתונים של רשימה מקושרת שיש לי את ה List הראשי ואת ה node שלה שבתוך ה Node שלה הרשימה יש עוד struct וזה סיפור שלא נגמר איך אפשר לדעת מה משחררים קודם,אם הכל שוחרר..וכו'..כל טיפ יתקבל בברכה!
תודה רבה!


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

  האשכול     מחבר     תאריך כתיבה     מספר  
  הטיפ הכי טוב זה לתכנת בצורה אחראית :) TTAsnn 25.04.09 21:05 1
  בשפות מודרניות אפשר בקלות לעשות את זה Net_Boy  25.04.09 21:24 2
     לא כל כך מדוייק TTAsnn 25.04.09 21:52 3
         תשמע , מה שאתה אומר נכון ברמות מסוימות Net_Boy  25.04.09 23:05 5
             למה ברמות מסוימות? הסכמת עם הכל... :) TTAsnn 26.04.09 20:50 8
  תודה לשניכם בינתיים VeNom  25.04.09 22:40 4
  ברור שיש כלים, אבל אין לי פה... שבוע הבא אהיה בבית, אחפש ואעלה לפורום ldan192  25.04.09 23:20 6
  valgrind זה כלי מאוד חזק.. אבל הוא רק בלינוקס... Nokia 25.04.09 23:33 7
     אכן כלי איכותי. TTAsnn 26.04.09 20:51 9
     מחזק ldan192  27.04.09 12:52 10
  יש כלים, אבל ... Deuce  01.05.09 13:42 11

       
TTAsnn

   21:05   25.04.09   
אל הפורום  
  1. הטיפ הכי טוב זה לתכנת בצורה אחראית :)  
בתגובה להודעה מספר 0
 
   באמת, עד כמה שזה נשמע מצחיק, תדאג לא לפשל.
במיוחד ברשימה מקשורת, שזה מבנה נתונים וקל מאוד לשמור על סדר בהם.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   21:24   25.04.09   
אל הפורום  
  2. בשפות מודרניות אפשר בקלות לעשות את זה  
בתגובה להודעה מספר 0
 
   בשפה כמו C הקומפיילר יכול לזהות לך דליפות זיכרון או לחלופין כלים חיצונים שעושים memory profiling

תחפש בגוגל
memory leak detection


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

   21:52   25.04.09   
אל הפורום  
  3. לא כל כך מדוייק  
בתגובה להודעה מספר 2
 
   הקומפיילר מזהה יחסית בסיסי, הוא הרי לא יכול לבדוק כל "מסלול שהתוכנית תבחר בה", ובקשר ל memory profiling זה עובד ברוב המקרים, אבל יש הרבה מאוד מקרי קצה שמתפספסים, כי גם פה אתה צריך חתיכת QA (הרבה מאוד עבודה) בשביל לבדוק את כל המבצים שהתוכנית תגיע אליהם.

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

בקיצור, תתכנת אחראי, אין קסמים.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   23:05   25.04.09   
אל הפורום  
  5. תשמע , מה שאתה אומר נכון ברמות מסוימות  
בתגובה להודעה מספר 3
 
   מבחינת הקומפיילר ברמה שהוא כותב , הוא יזהה לו את כל הדליפות זיכרון ויש סיכוי גדול גם שהוא ידע לנתב כל דליפה למקור שלה.
כי סה"כ זו תוכנית נאיבית שלא משתמשת בהקצאות חיצוניות ברגע שזה נהיה מסועף מידי באמת קשה לקומפיילר לדעת מאיפה כל דליפה באה .

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

ואגב, אני מאד מסכים איתך לגבי ה GOTO , מי שאומר שאסור להשתמש בזה , פשוט לא מבין מהחיים שלו יש לזה שימושים מאד חשובים , כנ"ל continue.


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

   20:50   26.04.09   
אל הפורום  
  8. למה ברמות מסוימות? הסכמת עם הכל... :)  
בתגובה להודעה מספר 5
 
   לגבי הפסקה השניה שלי, ברור שלא כולם אחראיים ולכן צריך לנקות אחרי אנשים, אבל ל garbage collectors יש הרבה חסרונות, ולא כולם צריכים לסבול מהחסרונות האלה בגלל קומץ של אנשים לא אחראיים, או בקיצור, מתכנת אחראי יכול להסתדר בלעדיהם, לפחות במידה מסויימת (מאוד רחבה).

מה שבאמת דפוק, זה שמוסדות הלימוד בארץ (ובעולם?) מלמדים ש goto זה רע :\
ומה שיותר גרוע, זה שהם מלמדים ש continue ו break זה טוב, אני חושב ששלושתם מעולים, יכול להבין למה אנשים אומרים שלא, אבל בסופו של דבר, שלושתם זה אותו דבר! ולכן אני לא שעושים את ההבדלה, הרי מה זה continue? זה בסה"כ goto למקום "אוטומטי", כנ"ל break.

חפרתי קצת על goto באיזה בלוג http://www.binaryvision.org.il/?p=135
אם מעניין אותך מה עוד יש לי להגיד, הכתיבה לא "בשיאה" כי הייתי ממש חולה שכתבתי את הרוב :( אבל עדיין, משקף מה שאני חושב.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   22:40   25.04.09   
אל הפורום  
  4. תודה לשניכם בינתיים  
בתגובה להודעה מספר 0
 
   אני מנסה להיות אחראי אבל לפעמים אין כ"כ הגיון.
אם לדוגמא יש לי מבנה של node שיש בו פוינטר ל Node הבא ופוינטר למבנה אחר..ואני נגיד מקצה זכרון קודם ל Node הראשון ואז למבנה הפנימי.
בשחרור שאני משחרר את הפנימי אני בעצם משחרר את הכל וזה לא מסתדר לי לוגית..
בגלל זה אני שואל..נכון שאני עובד עם הדיבאגר ובודק פחות או יותר את המשתנים ואת הכתובות זכרון אבל משום מה לפעמים אני לא מצליח להבין את הלוגיקה מאחורי זה.(לפעמים).


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   23:20   25.04.09   
אל הפורום  
  6. ברור שיש כלים, אבל אין לי פה... שבוע הבא אהיה בבית, אחפש ואעלה לפורום  
בתגובה להודעה מספר 0
 


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nokia
חבר מתאריך 1.7.02
538 הודעות
   23:33   25.04.09   
אל הפורום  
  7. valgrind זה כלי מאוד חזק.. אבל הוא רק בלינוקס...  
בתגובה להודעה מספר 0
 
  


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

   20:51   26.04.09   
אל הפורום  
  9. אכן כלי איכותי.  
בתגובה להודעה מספר 7
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   12:52   27.04.09   
אל הפורום  
  10. מחזק  
בתגובה להודעה מספר 7
 


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   13:42   01.05.09   
אל הפורום  
  11. יש כלים, אבל ...  
בתגובה להודעה מספר 0
 
יש כלים, אבל יחד עם זאת אני מניח שיותר קל יהיה לך להיות מתכנת אחראי מאשר להיות דיבאגר מקצועי. עם הזמן תתפתח ותכיר תוכנות על הדרך ותלמד לדבאג תוכניות. כרגע עוד יש לך גם מה ללמוד.






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

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

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



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