5.2.5.4. Dynamic Binding ויעילותברור כי dynamic binding פוגע ביעילות. השאלה היא עד כמה. בשפות שהן statically typed הפגיעה איננה חמורה – על כל גישה לפונקציה וירטואלית אנחנו משלמים ב-2-3 גישות למצביעים כדי לאתר את מיקומה – מספר קטן של מחזורי שעון. בשפות כגון Smalltalk העונש גדול יותר – גרף הירושה יכול להשתנות בזמן ריצה, ולכן יש צורך ביותר בדיקות. ב-Java, C# וכו' בניגוד ל-C++, ניתן לראות את כל הקוד בזמן קומפילציה (השפות הינן non-separated compilation), ולכן הן מסוגלות לעשות אופטימיזציה כתוצאה ממידע נוסף על המערכת ועל היררכיית הירושה). בצורה כזו הן מסוגלות לצמצם את הפגיעה בביצועים הנגרמת מ-dynamic binding. ב-C++ עקרונית ניתן לבצע אופטימיזציה דומה שתמומש ב-linker, אולם אופטימיזציה כזו איננה מבוצעת כיום. |
תוכן העניינים:
קישורים רלוונטיים:שיתוף: |
Borland style vptr
לפי מה שאני מכיר:"חסרון בגישה זו: גם כאשר איננו משתמשים ב-dynamic binding – אנחנו משלמים במקום"
לא נכון , עבור מחלקה A שאין לה מתודות דינמיות לא יווצר כלל המצביע, ולמשל עבור מחלקה B שיורשת מA פשוט נוסיף בהתחלה את המצביע, ואחרי הבלוק של A את שאר האינפורמציה של B . וככה לא משלמים על מה שלא משתמשים ועקרונות C++ נשמרים.
מה שכן באמת הcasting קצת יותר מסובך....