protected Vererbung



  • OK es gibt natürlich noch einen Grund für new und delete:
    Die Geschwindigkeit.
    Einen Small-Object-Allocator setzt man ja gerne ein, um das Allokieren von sehr kleinen Objekten drastisch zu beschleunigen (vielleicht 20-mal so schnell). Allerdings auf Kosten der größeren Objekte (vielleicht 0.5% mehr).
    Nun hat man viele viele Möglichkeiten, wo man ein wenig drehen und einstellen kann und letztendlich muß man abschätzen, wie oft der User kleine und wie oft er große Objekte anlegt. Und wie groß? Und wie oft? Und überhaupt?
    In C++ ist es ganz normal, daß man wegen der Laufzeitpolymorphie mit virtuellen Funktionen gleich Millionen von kleinen Objekten mit new anlegt und in einem Vector<Basisklasse*> oder sowas verwaltet. Das ist in C nicht so üblich.
    Naja, und das führt dazu, daß ein schlauer Bauer es so einrichtet, daß malloc eher für größere Objekte gut ist, während new auf jeden Fall bei den kleinen Objekten flott sein muß. Weil es Unterschiede in der typischen Verwendung gibt.
    Also in C++ new nehmen und in C malloc, damit man auch dem Bauer entgegenkommt.
    Deswegen darf man auch nicht was mit operator delete freigeben, was man mit malloc angelegt hat. Es könnten gant andere Implementierungen sein.
    Und deswegen nehme ich kein malloc, wenn ich an anderer Stelle eh operator new nehme, am Ende wird nur mehr Code erzeugt und mehr Speicher durch den Cache gejagt.


Anmelden zum Antworten