Memory pooling and memory managment c++ יש למישהוא מידע? - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

Memory pooling and memory managment c++ יש למישהוא מידע?


MasterDK

Recommended Posts

אם אתה בסך הכל מחפש fixed block size allocator, אז קוד מוכן לכאלה (ואחרים) כן אפשר למצוא ברשת.

אם אתה מדבר על לימוד, אז למרות שבאופן כללי יש לא מעט מידע וקוד על ניהול באינטרנט ובמקורות אחרים, מעולם לא ראיתי מדריך או tutorial לזה.

מדובר בנושא לא טריוויאלי ואם אתה מתכוון להתעסק איתו, לדעתי אתה צריך להיות מסוגל לקרוא מידע, להטמיע ולהשיג תוצאות ללא tutorial.

קישור לתוכן
שתף באתרים אחרים

לא באינטרסים שלי להשתמש בקוד מוכן בלי לדעת מה אני עושה.

לפי מה שהבנתי קריאה ל new and delete יקרה ולכן ממליצים להשתמש ב memory pools.

בכל מקרה גם מהחיפוש שערכתי אין הרבה מדריכים לזה. אם בכל זאת יכול להביא לי מקור כלשהוא שיעזור לי, אני מודה לו מראש.

קישור לתוכן
שתף באתרים אחרים

ה-global new ו-global delete (ובאותה הקשר, malloc ו-free) מבצעים הקצאת (או שחרור) מה-heap.

הקצאת מ-heap נחשבת פעולה יקרה יחסית, ועלולות בטווח ארוך להיות בעיות נוספות (פרגמנטציה, סריאליזציה של threads וכו').

אולם לפני שרצים ומחליפים את ה-heap במשהו אחר, תעצור ותחשוב. האם באמת יש לך בעיה של יעילות? ואם כן, האם אתה יכול לפתור אותה פשוט על ידי הקצאת הזכרון מראש?

בהאתם לדרישות שלך יש מספר פתרונות אפשריים. אם תציג את המצב ננסה לעזור לך.

אם אתה רוצה להסתדר לבד (מומלץ!) כנראה שתצטרך להשקיע את הזמן ולקרוא את המידע הלא מבוטל שקיים באינטרנט.

קישור לתוכן
שתף באתרים אחרים

הממ אין לי כרגע מצב שבו אני סובל מחוסר יעליות בגלל 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.

קישור לתוכן
שתף באתרים אחרים

ראשית, כל הכבוד.

נראה לי שיש אצלך איזשהו בלבול: ב-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.html

http://www.ddj.com/cpp/184403484

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...