הקצאת זיכרון ב c/cpp

yosi44441

New member
הקצאת זיכרון ב c/cpp

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

או שיש מנגנון של שחרור זיכרון לא בשימוש?

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

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

yosi44441

New member
מדוע?

מדוע שמערכת ההפעלה לא תריץ מנגנון איסוף זבל gc כמו דוט נט ותשחרר את הזיכרון שלא בשימוש?
&nbsp
אגב,כל תהליך יכול להקצות כמה זיכרון שהוא רוצה או שיש מגבלה?
 

selalerer

New member
הבעיה היא להגדיר מה זה "בשימוש"

כמו שציינת, יש שפות אחרות שיש להן garbage collector ומנגנונים שהשפה והסביבה מזהים בעזרתם שזיכרון איננו בשימוש עוד.
&nbsp
ב-C ו-++C, נכון לעכשיו, אין garbage collector אז לא עושים עבורך את העבודה לחלוטין אוטומאטית, אבל מה שכן יש ב-++C זה shared_ptr שזה בדיוק מנגנון שמזהה מתי זיכרון איננו בשימוש יותר ומשחרר לך אותו.
&nbsp
https://en.cppreference.com/w/cpp/memory/shared_ptr
&nbsp
 
למעלה