Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

1

02.01.2006, 12:29

auf die STL verzichten?

Ich habe mal ne Frage, denn in vielen Büchern die irgendwelche engines behandeln, wird immer auf die stl verzichtet, macht dass denn unbedingt immer sinn? Ok dass dinge wie vector und ähnliches nicht wirklich schnell sind und man sich die besser selber schreibt, weiß ich und habe ich auch gemacht. Mir gehts vor allem um die nicht zeitkritischen dinge, entweder nur selten benötigt werden, oder nicht in echtzeit gemacht werden, wie files auslesen mit fstream etc. Setzt ihr da die stl ein, oder nehmt ihr da die alten funktionen?
Was es alles gibt, das ich nich brauche - Aristoteles

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

02.01.2006, 12:40

naja, man muss eben wissen was man macht. Für Dateien auslesen reicht vollkommen STL, oder die stdio aus. Für Vektoren, Matrizen etc. sollte man schon eigenene Dateiformate haben, weil es für eine echte "Engine" einfach Bestandteil ist, und schneller (wenn man es richtig macht). Manche Dinge sind in der STL auch z.B. auf Speichersparend ausgelegt. Wenn man aber Zeitkritsche Dinge hat, wirft man schon mal den Speicher über Board und muss sich eben angepasste Formen schreiben.

Anonymous

unregistriert

3

02.01.2006, 13:20

CW_Kovok
Also ich benutz nur 2 Dinge aus der STL: std::list<T> und std::basic_string<T>. Den Rest schreibe ich selbst.

Bestes Beispiel ist der std::stack<T>. Mal ehrlich: Das ding allokiert bei jedem Push neuen Speicher und kopiert den alten rein, das dauert. Da geh ich lieber mit meinem ttl::stack<T> dran.

Oder dieses std::vector<T> gehabe, was will ich damit? Hab std::list<T>.

Oder fstreams. Brauch ich net, ich hab mir mit der Win32API selbst Streams für Dateihandling geschrieben! Vorteil: Schneller und Programmexe wird kleiner.

Momentan pfeife ich regelrecht auf die std::cout dinger. Brauch ich nicht mehr, hab Console Functions aus der Win32API.

Macht also oft viel Sinn! Aber auf std::list<T> und std::basic_string<T> möchte ich nicht verzichten.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

4

02.01.2006, 14:38

Also ich glaube nicht dass die STL so langsam ist, die wurde nämlich auf Geschwindigkeit hin entwickelt, weswegen man ja auch diverse Fehler erzeugen kann wenn man nicht aufpasst (da keine Überprüfung der Funktionsparameter etc)

Anonymous

unregistriert

5

02.01.2006, 14:42

Spik)evil(
Na na na, nicht _alles_ wurde auf Speed optimiert! Vieles mehr auf Speicherschohnung wie z.B. std::stack<T> oder std::basic_string<T>. Auf Speed wurden Dimensionskontainer optimiert wie z.B. std::list<T> oder std::map<T> usw. da deren Daten sich häufig ändern.

Also das Thema darf man nicht zu sehr auf die "leichte Schulter" nehmen. Die Standard Input/Output Funktionen sowie die Streams sind unglaublich langsam, da sie für die Speicherschohnung optimiert wurden.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

6

02.01.2006, 14:43

Ja kann sein, ich will da gar nicht gegen dich anreden, klappt ja eh nich ;) Hab die STL selber auch noch nicht so intensiv benutzt, hab aber das mit der Geschwindigkeitsoptimierung mal irgendwo gelesen.

Anonymous

unregistriert

7

02.01.2006, 14:46

Spik)evil(
Klar, wenn man sowas wie std::list<T> oder std::vector<T> benutzt muss man sagen: Schneller bekommt man es mit einer eigenen verketteten Liste nicht hin. Aber probier was ganz einfaches aus: Nimm mal mein Debugsystem und geh mit dem Profiler drüber. Dann ersetzt du das ttl::stack<T> durch den std::stack<T> und staune wie Dein Profiler schreit ;)

Immer rumtesten ;)

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

8

02.01.2006, 14:55

Ja rumtesten sollte ich echt mal, ich glaube immer einfach was ich lese^^ aber ich bin ja schon froh wenn ich DirectX voll verstanden hab, und zuviel fang ich lieber nicht an, das wird dann eh nix 8)

Anonymous

unregistriert

9

02.01.2006, 14:56

Spik)evil(
Du meinst COM verstehen ;) An DirectX selbst gibt es nichts großartiges zu verstehen. Ist ja alles COM ;)

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

10

02.01.2006, 14:59

ok wenn du das sagst ;p

Werbeanzeige