פורסם 2008 בפברואר 1217 שנים כל משתנה שהוגדר סטטית (ע"י הצהרה ישירה) יושב במחסנית.כל משתנה שהוגדר דינמית (ע"י הקצאת זכרון באמצעות new) יושב ב-heap.כשאתה מגדיר ככה:int* p = new int;אז p יושב במחסנית, אבל הערך שאליו מצביע p יושב ב-heap.
פורסם 2008 בפברואר 1417 שנים לפעמים הפוינטר לא נמצא עם הheap או על המחסנית כי הוא נמצע ברגיסטר אחרי שהאופטימיזר עובר עליו. במערכות PPC וRISC יש סטנדרטים של העברת פרמטרים דרך רגיסטרים . היתה למישהו בעבודה שלי בעיה שקשורה להקצאות זיכרון בC שקשורה לנושא. הוא רצה להקצות מערך של 3 מגה והיה לו איזה 20 מגה פנויים אבל בגלל שהיתה פרגמנתציה בheap הוא לא הצליח בגלל שבלוק הרציף הכי גדול שהיה בheap הוא של 2 מגה . מה שאפשר לעשות זה defragment לזיכרון ב heap אבל ב c זה קרוב לבלתי אפשרי כי אין מעקב של איזה מצביע מצביע לאיזה בלוק זיכרון שמוקצא או לתוכו . בjava יש כזה דבר קודם כל כי אין מצביעים של ממש יש רק reference שזה מצביעים בעלי יכולת מאוד מוגבלת והם מוגנים על ידי המערכת . המערכת הקצאת זיכרון יודעת מי מצביע לכל בלוק זיכרון . מתי ששום דבר לא מצביע לבלוק זיכרון מוקצא המערכת משחררת אותו . בjava יש פחות בעיה של פרגמנטציה כי המערכת מסוגלת להחליף את הבלוקים בזמן אמת בלי שהתוכנית תרגיש.
פורסם 2008 בפברואר 1417 שנים גם ב C יש כל מני מנהלי זיכרונות (לא אלו שבספריות הסטנדרטיוט) שאמורות לטפל בנושא הפרגמנטציה.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.