הקצאה דינאמית

Metheny

Member
הקצאה דינאמית

אני מדבר פה על שפות בלי garbage collection, כמו נגיד ++C: אם פונקציה מסויימת צריכה להשתמש בכמות דינאמית של זיכרון (נגיד מערך), וגודל הזיכרון הדרוש נקבע ע"י פרמטרים מסויימים בתוך הפונקציה,למלא את הזיכרון בנתונים, ולהחזיר אותו (כערך מוחזר הכוונה) , אז איך אפשר לעשות את זה מבחינת תכנות נכון/יפה? אולי להקצות את הזיכרון בתוך הפונקציה, ואח"כ המשתמש אחראי לשחרר את הזיכרון הזה מחוץ לפונקציה (שזה נראה לי הפתרון היחיד שאפשר, אבל אולי לא כל כך נכון לעשות?) המשתמש לא יכול להקצות את המקום מחוץ לפונקציה ואז לשלוח את הזיכרון המוקצה לפונקציה, כי הוא לא יודע כמה מקום להקצות.
 
אם אתה מדבר על שפת OOP...

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

Metheny

Member
וגם...

גם אם זה OOP, ואולי זו סתם פונקציית עזר, והזיכרון שמוקצה אינו מוקצה לטובת מצביע שהוא member variable. ה-Destructor לא יכיר את המצביע הזה.
 

VoodooKid

New member
שימוש בפוינטר בשביל להקצות זכרון

אפשר לשלוח פוינטר לטיפוס שאתה רוצה להקצות ממנו זכרון ואז לשלוח רק את הפוינטר לפונ' ובסוף ב DESTractor לבדוק אם הוקצה זכרון ואם כן אז לשחרר אותו.
 

codec

New member
הקצאת זיכרון

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