פורסם 2007 בנובמבר 2217 שנים יש למישהוא מדריכים שמסביירם את עקרונות ה memory pooling and memory management ואיך משתמשים בהם?אפשר גם באנגלית. תודה רבה מראש.
פורסם 2007 בנובמבר 2217 שנים אם אתה בסך הכל מחפש fixed block size allocator, אז קוד מוכן לכאלה (ואחרים) כן אפשר למצוא ברשת.אם אתה מדבר על לימוד, אז למרות שבאופן כללי יש לא מעט מידע וקוד על ניהול זיכרון באינטרנט ובמקורות אחרים, מעולם לא ראיתי מדריך או tutorial לזה. מדובר בנושא לא טריוויאלי ואם אתה מתכוון להתעסק איתו, לדעתי אתה צריך להיות מסוגל לקרוא מידע, להטמיע ולהשיג תוצאות ללא tutorial.
פורסם 2007 בנובמבר 2317 שנים מחבר לא באינטרסים שלי להשתמש בקוד מוכן בלי לדעת מה אני עושה.לפי מה שהבנתי קריאה ל new and delete יקרה ולכן ממליצים להשתמש ב memory pools.בכל מקרה גם מהחיפוש שערכתי אין הרבה מדריכים לזה. אם בכל זאת יכול להביא לי מקור כלשהוא שיעזור לי, אני מודה לו מראש.
פורסם 2007 בנובמבר 2317 שנים ה-global new ו-global delete (ובאותה הקשר, malloc ו-free) מבצעים הקצאת (או שחרור) זכרון מה-heap.הקצאת זכרון מ-heap נחשבת פעולה יקרה יחסית, ועלולות בטווח ארוך להיות בעיות נוספות (פרגמנטציה, סריאליזציה של threads וכו').אולם לפני שרצים ומחליפים את ה-heap במשהו אחר, תעצור ותחשוב. האם באמת יש לך בעיה של יעילות? ואם כן, האם אתה יכול לפתור אותה פשוט על ידי הקצאת הזכרון מראש?בהאתם לדרישות שלך יש מספר פתרונות אפשריים. אם תציג את המצב ננסה לעזור לך.אם אתה רוצה להסתדר לבד (מומלץ!) כנראה שתצטרך להשקיע את הזמן ולקרוא את המידע הלא מבוטל שקיים באינטרנט.
פורסם 2007 בנובמבר 2317 שנים מחבר הממ אין לי כרגע מצב שבו אני סובל מחוסר יעליות בגלל new ו delete.פשוט מקריאה של ספר Efficient C++ Performance Programming Techniquesהבנתי ששימוש ב NEW ו DELETE יקר יחסית (למרות שהוא הציג לולאה שמבצעת 1M פעולות של הקצאה ושיחרור זיכרון למחלקה, זמן הפעולה לקח 1.5 שניות, לעומת מנהל זיכרון שהוא יצר לאותה מחלקה זה לקח רק 43 מילישניות). עוד לא קרה לי מצב ואני מאמין שגם לא יקרה מצב שבו אני יקצה וישחרר 1M אובייקטים וגם אם יהיה מצב כזה 1.5 שניות לא ישנו הרבה זה לא 1.5 דקות.אחת הסיבות שאני באמת רוצה לכתוב מנהל זיכרון כי א' כל לצרכי למידה, כי מי יודע אולי יום אחד אפתח שרת HTTP שכן יצטרך להישתש בזה ושם 1.5 שניות כן משנה.כמו כן ככל התוכניות שלי הולכות ונהיות מסובכות יותר אני מקצה ומשחרר הרבה יותר אובייקטים דינאמית והיה נחמד שיהיה לי מחלקה שתנהל את הזיכרון לכל אובייקטים כי כולנו בני אדם ויכולים לשכוח לשחרר אובייקט פה ושם.וכן אני יודע שקיימות ספריות כמו boos::pool boost::auto_ptrוכדומה, זה לא הרעיון.. כל אחד יכול להוריד ספריה מוכנה להישתמש בה,אני מעדיף לעשות הכל לבד, מה שנקראה להמציא את הגלגל (חוץ ממקרים בהם זה כמאט בילתי אפשרי כמו לדוגמא לכתוב API כמו OpenGL או D3D).לסיכום: אני רוצה ליצור "ברכת זיכרון" או מנהל זיכרון לצרכי לימוד, ושמירה על אובייקטים שאני מקצה להם זיכורן על מנת למנוע memory leak.
פורסם 2007 בנובמבר 2317 שנים ראשית, כל הכבוד.נראה לי שיש אצלך איזשהו בלבול: ב-C++ אין ממש קשר בין הטכניקה המשמשת להקצאת זכרון (heap הרגיל, תחליפים, כתיבת pool או אלוקטור משלך, הקצאות סטטיות שונות וכו') לבין טכניקות המשמשות לניהול זמן החיים של הזכרון המוקצה (destructors, smart pointer, garbage collector וכו').בכל מקרה, אני מציע שפשוט תתחיל לקרוא באינטרנט על הנושאים. יש ממש היצע גדול של מידע. לדוגמא בויקיפדיה: http://en.wikipedia.org/wiki/Dynamic_memory_allocationתתחיל במימוש אלוקטורים פשוטים (block or fixed size allcators, free list allocators וכו'). אם אתה רוצה להריץ בדיקות, הנה תיאור של השוואה בין מספר אלוקטורים: http://developers.sun.com/solaris/articles/multiproc/multiproc.htmlאל תצפה כמובן להגיע לאותם תוצאות כמו hoard ו-mtmalloc. מימוש אלוקטור טוב הוא קשה. בתוכניות אמיתיות תשתמש באלוקטור קיים כמו Hoard. (אלא אם כן אתה צריך fixed size allocator או משהו פשוט בסגנון, ואז כמובן תכתוב ותשתמש בו).לגבי שחרור זכרון אוטומטי - תחפש מידע על smart pointers. זו התחלה טובה. דע לך שמימוש נכון של smart pointer ב-C++ הוא מסובך. שווה לממש אחד בעצמך, אבל עבור פרוייקטים שבהם היציבות חשובה לך, תשתמש בכאלה מ-boost או מהספריה הסטנדרטית.אוסף מאמרים שחלקם קשור למימוש smart pointers:http://www.aristeia.com/magazines.htmlhttp://www.ddj.com/cpp/184403484
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.