Klasse oder Struct



  • humpelnicht schrieb:

    Hallo,

    ich bin gerade am überlegen was schneller ist :
    Wenn ich über die get Funktionen einer Klasse an die Variable komme "classe.getVariableX() "oder einfach aus der Struct "struktur.variableX" lese.

    Es geht darum Objekte aus Dreiecken zusammenzubasteln ( mehrere Tausend )und diese dann mit OpenGL zu zeichnen .

    Für die OpenGL Aufrufe brauche ich dann die Variablen der Dreiecke .

    Wie wird nun am schnellsten dabei verfahren ?

    Direkter Zugriff ist immer schneller als über Memberfunktionen" da man in diesem Fall zB das einrichten und auflösen eines neuen stackframes und paar andere andere sachen nicht hat. Allerdings verletzt man in C++ somit die Schutzkonzepte, weswegen dir hier eingefleischte C++ Fanatiker und C hasser was anderes erzählen werden. Sie werden dir erzählen, das es irrelevant ist.

    Aber wie mein vorposter geschrieben hat, optimierst du echt an der falschen stelle. Machs lieber über memberfunktionen, da du somit einen sauberen code erstellst. Die sache moit den stackframes und so kannst du in der pfeife rauchen, da es darauf echt nicht mehr ankommt.



  • [quote="rtzrz"]
    Direkter Zugriff ist immer schneller als über Memberfunktionen" da man in diesem Fall zB das einrichten und auflösen eines neuen stackframes und paar andere andere sachen nicht hat./quote]

    Nein, das stimmt nicht. Bei Funktionen die inline sind gibt es keinen Geschwindigkeitsunterschied.



  • [quote="Blue-Tiger"]

    rtzrz schrieb:

    Direkter Zugriff ist immer schneller als über Memberfunktionen" da man in diesem Fall zB das einrichten und auflösen eines neuen stackframes und paar andere andere sachen nicht hat./quote]

    Nein, das stimmt nicht. Bei Funktionen die inline sind gibt es keinen Geschwindigkeitsunterschied.

    quote="rtzrz"]
    Direkter Zugriff ist immer schneller als über Memberfunktionen" da man in diesem Fall zB das einrichten und auflösen eines neuen stackframes und paar andere andere sachen nicht hat./quote]

    Wie dem auch sei.



  • rtzrz schrieb:

    Allerdings verletzt man in C++ somit die Schutzkonzepte

    Es ist nicht irrelevant aber verletzt durchaus das Konzept der Kapselung. Sollte also daher vermieden werden.

    Blue-Tiger schrieb:

    rtzrz schrieb:

    Direkter Zugriff ist immer schneller als über Memberfunktionen" da man in diesem Fall zB das einrichten und auflösen eines neuen stackframes und paar andere andere sachen nicht hat./quote]

    Nein, das stimmt nicht. Bei Funktionen die inline sind gibt es keinen Geschwindigkeitsunterschied.

    Wenn die Funktion wirklich "geinlined" wird gibt es keinen unterschied. Allerdings wird der Compiler nicht zum inlinen gezwungen.

    Allerdings bringen solche Optimierungsmaßnahmen nicht wirklich was... Such lieber den tasächlichen Flaschenhals und versuch diesen auszumerzen.



  • David_pb schrieb:

    rtzrz schrieb:

    Allerdings verletzt man in C++ somit die Schutzkonzepte

    Es ist nicht irrelevant aber verletzt durchaus das Konzept der Kapselung. Sollte also daher vermieden werden.

    Blue-Tiger schrieb:

    rtzrz schrieb:

    Direkter Zugriff ist immer schneller als über Memberfunktionen" da man in diesem Fall zB das einrichten und auflösen eines neuen stackframes und paar andere andere sachen nicht hat./quote]

    Nein, das stimmt nicht. Bei Funktionen die inline sind gibt es keinen Geschwindigkeitsunterschied.

    Wenn die Funktion wirklich "geinlined" wird gibt es keinen unterschied. Allerdings wird der Compiler nicht zum inlinen gezwungen.

    Allerdings bringen solche Optimierungsmaßnahmen nicht wirklich was... Such lieber den tasächlichen Flaschenhals und versuch diesen auszumerzen.

    Du mich auch. 👎



  • Flaschenhals schrieb:

    David_pb schrieb:

    rtzrz schrieb:

    Allerdings verletzt man in C++ somit die Schutzkonzepte

    Es ist nicht irrelevant aber verletzt durchaus das Konzept der Kapselung. Sollte also daher vermieden werden.

    Blue-Tiger schrieb:

    rtzrz schrieb:

    Direkter Zugriff ist immer schneller als über Memberfunktionen" da man in diesem Fall zB das einrichten und auflösen eines neuen stackframes und paar andere andere sachen nicht hat./quote]

    Nein, das stimmt nicht. Bei Funktionen die inline sind gibt es keinen Geschwindigkeitsunterschied.

    Wenn die Funktion wirklich "geinlined" wird gibt es keinen unterschied. Allerdings wird der Compiler nicht zum inlinen gezwungen.

    Allerdings bringen solche Optimierungsmaßnahmen nicht wirklich was... Such lieber den tasächlichen Flaschenhals und versuch diesen auszumerzen.

    Du mich auch. 👎

    Solang du nichts qualifizierteres beizutragen hast halt einfach den Mund.



  • Zur Zeit gibt es noch kein Flaschenhals.
    Meine Frage sollte nur für die Zukunft vorsorgen wenn das Projekt komplizierter wird.
    Ich wollte nähmlich schon in der Frühe anfangen optimierend zu coden.
    Hab nähmlich gelesen dass ein Funktionsaufruf die Pipeline des CPU bis auf 20% Leisung runtersetzen kann da die Rücksprungaddresse zur Laufzeit erst bekannt ist wenn die Methode schon fast durchlaufen wurde und erst dann neue OpCodes bearbeitet werden.

    Ich finde es zur Zeit einfacher mit den Structs zu arbeiten .
    Hab aber schon mal beide varianten Programmiert.

    Bei den Klassen sehe ich den vorteil der Vererbung.

    Bei den Structs einfach die Einfachheit.Die Structs kann ich nähmlich alle in ne Headerfile stecken und an das Projekt hängen.

    Mit den Klassen hab ich mehr arbeit.

    Danke für erue Hilfe , so wies aussieht ist es mit den Klassen also vorteilhafter.



  • Kennst du egtl den Unterschied zwischen struct und class? 😛



  • Kennst du egtl den Unterschied zwischen struct und class? 😛

    Ehrlichgesagt bin ich mir da nicht sicher.

    Ein Struct ist so wie ich das sehe ne Bitfolge bestimmter länge ohne methoden.
    Deswegen ist ein direkter Zugriff auf die Bits möglich.

    Bei ner Klasse kann ich methoden benutzen und die Klassen ableiten.
    Den direkten Zugriff über klasssen kann ich auch über private member erreichen.

    Den genauen Unterschied zwischen struct und class kenn ich aber nicht.



  • humpelnicht schrieb:

    Kennst du egtl den Unterschied zwischen struct und class? 😛

    Ehrlichgesagt bin ich mir da nicht sicher.

    Ein Struct ist so wie ich das sehe ne Bitfolge bestimmter länge ohne methoden.
    Deswegen ist ein direkter Zugriff auf die Bits möglich.

    Bei ner Klasse kann ich methoden benutzen und die Klassen ableiten.
    Den direkten Zugriff über klasssen kann ich auch über private member erreichen.

    Den genauen Unterschied zwischen struct und class kenn ich aber nicht.

    es gibt auch nur einen:
    Beim Struct sind alle Attribute _defaultmaessig_ public, bei der class private.



  • Blue-Tiger schrieb:

    humpelnicht schrieb:

    Kennst du egtl den Unterschied zwischen struct und class? 😛

    Ehrlichgesagt bin ich mir da nicht sicher.

    Ein Struct ist so wie ich das sehe ne Bitfolge bestimmter länge ohne methoden.
    Deswegen ist ein direkter Zugriff auf die Bits möglich.

    Bei ner Klasse kann ich methoden benutzen und die Klassen ableiten.
    Den direkten Zugriff über klasssen kann ich auch über private member erreichen.

    Den genauen Unterschied zwischen struct und class kenn ich aber nicht.

    es gibt auch nur einen:
    Beim Struct sind alle Attribute _defaultmaessig_ public, bei der class private.

    So isses. D.h. es ist total egal ob du struct oder class verwendest. Nur die standard Zugriffsspezifikationen entsprechen ggf nicht deinen Wünschen.

    grüße


Anmelden zum Antworten