Vor- und Nachteile von Klassen und Structs

  • Allgemein

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Andy.

    Vor- und Nachteile von Klassen und Structs

    Hallo,

    ich habe ja vor ein paar tagen meine Game Engine veröffentlicht. Gestern habe ich auch das Projekt auf reddit vorgestellt. Dort hat sich dann jemand dazu geäußert das meine Vec3 klasse sehr viel Performance kosten könnte und ein struct besser geeignet wäre. Nun würde ich gerne wissen welche Vorteile man von einer klasse gegenüber einen struct hat. Ich nutze den Vec3 meist als "Wrapper" weil die Bullet Physic libary einen eigenen Vector3 hat und auch glm, was für das rendern genutzt wird.

    Ich würde nun gerne wissen, ob es wirklich einen so Signifikaten unterschied machen kann und welche Vorteile und Nachteile ich von einer klasse und einem struct habe.

    Beste Grüße

    Andy
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Der grundlegende Unterschied zwischen Klassen und Strukturen ist, dass Klassen grundsätzlich erstmal Referenztypen und Structs Value-Typen sind.

    Ich habe mir deinen Code nicht angeschaut, aber je nachdem, wie viele Daten du in dem Objekt speicherst, kann es durchaus von Vorteil sein, dass zu einem Struct umzuwandeln.
    Grundsätzlich gilt: wenn du weniger Daten speicherst als die Bitlänge der Plattform auf die das Ding läuft, kannst du einen Struct nehmen. Dann ist es tatsächlich sinnvoller, einfach den kompletten Wert zu kopieren, als die Referenz zu kopieren und dann zu dereferenzieren.
    Natürlich kannst du auch Structs verwenden, wenn du diese Copy-Semantik brauchst.

    EDIT: Deine Plesk-Konfiguration ist kaputt.
    676-games.de/ -> kein HTTPS (Zertifikat ist das von Plesk und somit schrott) und du hast keine Weiterleitung/kein Alias für das implizierte www.

    Wenn du das Ding bei Strato gehostet hast, würde ich da mal eine Supportanfrage stellen - bei Stratoconfigs kann ich dir leider keinen nützlichen Input geben, weil meine Hostingdienste gänzlich anders aufgebaut sind.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Ok mit dem Server muss ich mal schauen. Kenne mich leider nur sehr rudimentär damit aus. Vielen dank dafür schon mal. Meinst du, dass der Vec3 wirklich so viel Performance kosten könnte? Da ich sehr viel Reworken müsste, wenn ich diesen ändere. Ich würde eher das Bottleneck bei den Iteration von sehr vielen Elementen sehen, da ich ja mit der Engine noch kein Multithreading für Update und Renderen unterstütze. Ich hatte es mal drin, dass die Updates in einem extra Thread durchgeführt werden, dass führte jedoch zu einigen Problemen, weswegen ich es raus genommen habe.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Andy schrieb:

    Kenne mich leider nur sehr rudimentär damit aus.

    Falls du dich nicht um den Kram kümmern möchtest, schreib mir mal und wir können gemeinsam schauen, was man da machen kann :)

    Andy schrieb:

    der Vec3 wirklich so viel Performance kosten

    In diesem Fall glaube ich das nicht. Das sind jetzt nur 12 Byte, die kopiert würden. Geht man davon aus, dass die Adresslänge bei allen Zielsystemen 64b (8B) ist, dann werden nur 4B mehr kopiert.
    Das klingt IMO eher nach einer Mikrooptimierung, gerade bei den heutigen RAM Standards und CPU-Geschwindigkeiten - aber ich bin auch kein Spieleentwickler. Wenn ich Sachen auf eine GPU ablade, dann sind es eher riesige Datenmengen und mich interessiert nur der Rückgabewert.

    Bei den eingebetteten Systemen auf die ich sonst so arbeite (in C++) wäre das durchaus eine Überlegung wert, so eine Mikrooptimierung zu machen, aber hier ist das mEn nicht notwendig. Zumindest noch nicht.
    Da würde ich eher zusehen, dass du das Ding auf einen Stand bringst, womit du dann einen richtigen Profiler drüber jagen kannst und dann Optimierungspotenzial findest.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)

    siycah schrieb:

    Falls du dich nicht um den Kram kümmern möchtest, schreib mir mal und wir können gemeinsam schauen, was man da machen kann


    Ok werde ich machen :) bin nur noch auf der Arbeit. Werde mich heute Abend mal bei dir melden.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener