Die besten Programme enthalten keine Klassen!?



  • Fact: malloc()/free() are faster than new/delete.

    Das sind meine Liblingskommentare.

    Die haben da Tests mit komplexen Konstruktoren und schreiben dann:

    Test* foo = (Test*) malloc(sizeof(Test));
    // vs.
    Test* foo = new Test;
    

    Und dann wundern die sich. Ich lach mich immer schlapp.
    Auf Kommentare diesbezüglich bekomme ich nie Antworten 😞

    Bei meinen tests war ein 'operator new(x)' immer genau so schnell, wie ein entsprechendes std::malloc.



  • Erlaubt es der Standard eigentlich, die vtbl (a la GTK+) direkt ins Objekt zu packen, statt sie über den vptr zugänglich zu machen?



  • Ich glaube ehrlich gesagt nicht, dass das was bringen würde. Man spart sich eine Referenzierung, aber ein kleines Objekt könnte damit auf das vielfache seiner Größe anwachsen. Und für temporäre Objekte wäre der Konstruktoraufruf dann eine Katastrophe. 😉



  • nix da schrieb:

    @Shade:
    Du behauptest ja vieles wenn der Tag lang ist, hat sich ja hier im Forum schon oft rumgesprochen. Aber es wäre gut wenn Du Deine Behauptungen mal belegen würdest 😉

    was genau soll ich beweisen?
    dass OOP 10% schneller ist als nicht OOP?
    klar, mach ich sobald du mir bewiesen hast, dass OOP langsamer ist



  • Optimizer schrieb:

    Man spart sich eine Referenzierung, aber ein kleines Objekt könnte damit auf das vielfache seiner Größe anwachsen.

    Meiner Erfahrung nach sind Klassen mit wirklich vielen virtuellen Funktionen eher die Ausnahme. Der Compiler könnte wenn es sein muss außerdem von Fall zu Fall entscheiden, ob er es so oder so macht. Ich frag nur, ob das überhaupt legal wäre.



  • Shade Of Mine schrieb:

    C++ ist etwa 10% schneller als C
    ich hab das einmal getestet

    jup. ist bei mir ähnlich. klar, die meisten sachen sind in beiden sprachen gleich schnell, aber wenn's um komplexere probleme geht, kackt c einfach ab. außer natürlich, man macht sich die mühe, sowas wie std::sort mit bleistift und papier zu expandieren und 10k code in c einzuhacken, und zwar für jeden typ und jede vergleichsfunktion aufs neue. macht das wirklich einer?





  • Shade Of Mine schrieb:

    nix da schrieb:

    @Shade:
    Du behauptest ja vieles wenn der Tag lang ist, hat sich ja hier im Forum schon oft rumgesprochen. Aber es wäre gut wenn Du Deine Behauptungen mal belegen würdest 😉

    was genau soll ich beweisen?
    dass OOP 10% schneller ist als nicht OOP?
    klar, mach ich sobald du mir bewiesen hast, dass OOP langsamer ist

    Das habe ich nicht angesprochen, ich meine die ganz anderen Dinge, tief in den Datenbanken des Forums verschollen 😉



  • Shade Of Mine schrieb:

    dafuer koennen virtuelle funktionen geinlined werden 😉

    Wie so? ist das Standardkonform?



  • itman schrieb:

    Shade Of Mine schrieb:

    dafuer koennen virtuelle funktionen geinlined werden 😉

    Wie so? ist das Standardkonform?

    natuerlich. wenn schon zur compiletime der typ feststeht, dann kann man auch inlinen... natuerlich nicht, wenn der typ erst zur laufzeit feststeht 😉



  • Shade Of Mine schrieb:

    natuerlich nicht, wenn der typ erst zur laufzeit feststeht 😉

    natürlich dann auch. nur machen das übliche c++-compiler nicht.



  • Ist doch völlig egal. Ob eine Funktion geinlinet wird oder nicht gehört nicht zum beobachtbaren Verhalten des Programms, also macht der Standard darüber auch keine Aussage.



  • Zu Dir kann ich nur sagen: "Weis alles, kann alles, kann nix, weis nix". Hast Du überhaupt schonmal was fertig gemacht was Dich weiter gebracht hat? Ich mein: Findest Du nicht, dass Du dich eher selber lächerlich machst anstatt andere so zu beschuldigen? Der scheint wenigstens Ahnung von der Materie zu haben in gegensatz zu Dir, was ich Dir jetzt offiziell mal unterstelle.

    Du hast doch keine Ahnung von meinen Projekten oder von dem, was ich bisher gemacht habe, woher nimmst du also die Frechheit mich und nicht meine Forenposts kritisieren meinen zu müssen?
    Jedenfalls weißt du gar nichts, ich breche die Projekte oft dann ab, wenn ich nicht mehr glaube dadurch noch etwas zu lernen, abgesehen davon habe ich in diesem Forum aber noch nie etwas zu meinen Projekten gepostet oder gesagt, du kannst also nicht einmal etwas davon wissen.

    Den Beitrag brauchst du nicht kommentieren.

    MfG Eisflamme



  • Mal ne Frage:

    Meint ihr, es ist möglich, dass der Compiler sowas wie

    virtual int getSize();
    

    ersetzen kann, in dem er keinen Zeiger auf die Methode in der vftbl ablegt, sondern den Wert selber?
    (Annahme: Methode liefert nur einen Wert zurück)



  • Theoretisch schon, allerdings braucht es dazu eine Analyse des ganzen Programms, weil der Compiler sicherstellen muss, dass sämtliche Implementierungen dieser Funktion sich so optimieren lassen. C++ ist aber eigentlich für getrennte Übersetzung vorgesehen, d.h. dass kein wesentlicher Informationsfluss zwischen den Übersetzungseinheiten, der über ein paar Typinformationen hinausgeht, stattfindet.



  • was ich bis jetzt gelesen habe,
    wird für den meisten engine- und rendercode weiterhin C benutzt,
    für den gamecode aber diesmal C++



  • das vorherige war auf doom3 bezogen 🙂



  • Meiner Erfahrung nach sind Klassen mit wirklich vielen virtuellen Funktionen eher die Ausnahme.

    Meiner Erfahrung nach sind Klassen mit wirklich vielen Funktionen eher die Ausnahme. (Ich gehe hierbei von meinen Designs aus.) Das bekräftigt zwar deine Aussage, klaut ihr aber den Sinn :p

    Nochwas wegen deiner Idee die Tabelle in das Objekt zu integrieren: Bashar, hast du auch an RTTI gedacht? Ich weiß, du benutzt es nie, ich aber schon.



  • Helium schrieb:

    Meiner Erfahrung nach sind Klassen mit wirklich vielen Funktionen eher die Ausnahme. (Ich gehe hierbei von meinen Designs aus.) Das bekräftigt zwar deine Aussage, klaut ihr aber den Sinn :p

    Warum soll es den Sinn klauen? Das ist nach wie vor ein Argument gegen den Einwand, dadurch würden die Instanzen alle riesengroß.

    Nochwas wegen deiner Idee die Tabelle in das Objekt zu integrieren: Bashar, hast du auch an RTTI gedacht? Ich weiß, du benutzt es nie, ich aber schon.

    Man könnte RTTI über noch einen zusätzlichen Zeiger implementieren. Vielleicht auch noch einfacher, aber alles was mir da auf die Schnelle einfällt, verstößt wahrscheinlich gegen den Standard.

    BTW: Da weißt du nicht viel :p :p



  • Da weißt du nicht viel

    Entshuldige. Ich hatte den Thread etwas falsch in Errinnerung.

    ich schrieb:

    @Bashar (Off-Topic): wieso 'typeid(Hund())' und nicht einfach 'typeid(Hund)'?

    [quote="du"]
    Mangelnde Ahnung von typeinfo meinerseits
    [quote]


Anmelden zum Antworten