הקצאת זיכרון דינמית
ערך מחפש מקורות
| ||
ערך מחפש מקורות | |
במדעי המחשב, הקצאה דינמית היא הקצאתו של זיכרון אחסון עבור תוכנת מחשב, במהלך זמן הריצה של התוכנית. זוהי דרך לפזר בעלות על משאבי זיכרון מוגבלים בין חלקים רבים של מידע וקוד, זאת מכיוון שניתן להקצות זיכרון לפי הצורך המתפתח בלבד, ואין צורך שהתוכנה תתפוס מראש זיכרון עבור המקרה הגרוע ביותר (אנ').
זיכרון שהוקצה דינמית, נשאר מוקצה עד שישוחרר במפורש, על ידי התוכניתן או על ידי מנגנון אחר המטפל בכך (כמו אספן זבל הקיים בחלק מסביבות הריצה), דבר השונה בתכלית מדרך הטיפול בהקצאתו של זיכרון אוטומטי או סטטי. נאמר כי לאובייקט כזה, אשר הוקצה דינמית, יש אורך חיים דינמי.
הבעיה הראשית של אלגוריתמים המסתמכים על הקצאה דינמית, היא להימנע מקיטוע (פרגמנטציה) פנימי וחיצוני, יחד עם שמירה על יעילות ההקצאה ושחרור המשאבים. כמו כן, לרוב האלגוריתמים אשר בשימוש, קיימת הבעיה שמספר רב של הקצאות קטנות עלול לגרום לבזבוז משאבים עקב הצורך בשמירת מידע על ההקצאה.
הקצאת זיכרון מתבצעת בדרך כלל על ידי פניה למערכת ההפעלה. יכולים להיווצר תנאים שיגרמו להקצאה להיכשל, למשל כאשר מערכת ההפעלה לא מצליחה למצוא זיכרון פנוי בגודל המבוקש. בגלל בעיה זו, אפליקציות קריטיות כמו מערכות למטוסים אינן משתמשות בהקצאה דינמית. הדבר מקשה על הפיתוח אך מוסיף ליציבות ולביטחון, שכן ברור שאם האפליקציה החלה לעבוד, יש לה את כל המשאבים על מנת להמשיך עד שתזדקק לזיכרון נוסף.
דוגמת קוד
[עריכת קוד מקור | עריכה]שפה | טיפוס | דוגמת קוד |
---|---|---|
++C | מערך שלמים | [20]int* a = new int;
|
C | מערך שלמים | (int* a = malloc(sizeof(int)*20;
|