Wieso brauchen kleine Spiele/Apps heutzutage so viel mehr Speicher als damals?

...komplette Frage anzeigen

8 Antworten

Ich denke, die meisten Programmierer lernen heutzutage einfach nicht mehr, effizient (im Bezug auf Speicher und Geschwindigkeit) zu programmieren.

Diese Vermutung wird durch Code anderer Leute hier auf GF oder auch bei SO und anderen "Foren" bestätigt. Ich gebe zu, ich bin ein Freund von Assembler und Lowlevel-Programmierung und schlechter Code bereitet mir schon fast physisches Unbehagen ...

Aber es kommt leider nur ganz ganz gaaaaanz selten vor, dass ich in der heutigen Zeit von Quelltexten anderer wirklich begeistert bin, weil diese einfach unglaublich elegant, clever und effizient implementiert wurden.

Meistens ist eher das Gegenteil der Fall: Auf den ersten Blick sehe ich beim überfliegen einiger Zeilen Programmierfehler, Flaschenhälse, Sicherheitslücken

Speicherplatz und CPU-Leistung gibt es fast kostenlos, also geben sich viele Entwickler einfach keine Mühe, vernünftigen Code zu schreiben. Die meisten können es vermutlich auch einfach nicht, weil sie es nie richtig gelernt haben.

Wirtschaftlichkeit und die Verkürzung der Entwicklungszeit ist zwar - zu Recht - ein gewichtiges Argument, aber es wird meistens leider auf Kosten von Effizienz und Optimierungen total überbewertet.

Du hast bestimmt schon gehört, dass "Premature-Optimization" was ganz schlechtes ist, aber Hand aufs Herz: Wie oft hast du schon gehört, dass "Premature Pessimization" mindestens genauso schlecht - oder gar noch schlimmer - ist?

Viele Entwickler neigen deshalb dazu, "unbewusst aber absichtlich" deutlich schlechteren Code zu schreiben, als sie eigentlich müssten / könnten.

Ich betone nochmal: Optimierungen sind natürlich nicht alles. Aber sie kommen fast immer viel zu kurz!

Wenn ich mir die Größen gängiger Apps angucke, dann kann man leider gar nicht anders als zu sagen, dass da offensichtlich etwas komplett schief läuft. Aber "Bloat" gibt es auch auf vielen anderen Gebieten! Viele Websites binden zich KB große JS-Libs ein, um eine einzige Funktion daraus aufzurufen, die man auch trivial ohne diese Abhängigkeiten binnen Minuten hätte implementieren können.

Für Certificate-Pinning auf iOS-Geräten wird gern eine fette Lib benutzt, aus der nur eine einzige Funktion aufgerufen wird, die exakt zwei Zeilen Obj-C umfasst und weiter keinerlei Abhängigkeiten mit sich bringt. Trotzdem verwenden knapp 80% aller iOS-Apps mit dieser Funktionalität diese Bibliothek.

Zum Schluss noch zwei kleine Beispiele, die ich gerade im Hinterkopf habe:

  • Zu DOS-Zeiten hatte ich in Assembler eine grafische Feuer-Simulation geschrieben, sodass auf dem Monitor Flammen loderten, wie in einem Kamin: Dateigröße 26 Byte.
  • Ich habe einen Mini-Webserver in C geschrieben, der auf jedem aktuellen Linux läuft und eine selbstgeschriebene und statisch gelinkte Standardbibliothek benutzt. Es sind keine weiteren Abhängigkeiten notwendig und es wird ganz normal mit GCC oder Clang kompiliert: Dateigröße knapp unter 700 Byte.
  • Unter Windows habe ich mit MASM ein Programm geschrieben, was in einem Fenster die Ausgabe der Webcam anzeigt. Dazu gibt es einen Button, bei dessen Klick ein "Foto" der aktuellen Webcam-Aufnahme als Bild gespeichert wird: Dateigröße etwas über 500 Byte.

Ich habe gerade gestern einen relativ überschaubaren Algorithmus in C++ geschrieben, und bin am Ende bei knapp 100 Zeilen Quelltext gelandet. Der Compiler übersetzt das ganze ist genau 6 Byte, bzw. exakt zwei CPU-Instruktionen.

Das ist bei C++ möglich, da der größte Teil des Algorithmus zur Kompilierzeit vorberechnet wird, und nur noch ein kleiner Rest zur Laufzeit ausgeführt werden muss.

Meine C++ Quelltexte sind immer verhältnismäßig groß, verglichen mit dem Endresultat. Und das, obwohl ich massivst auf Templates, inline- und constexpr-Funktionen setze.

Natürlich spielen bei Games die Assets die bedeutendste Rolle, und der Programmcode von Bibliotheken und Engine dürfte relativ klein sein. Aber wenn ich sehe, dass die GF-App 5.7 MB groß ist, und mir angucke, was da so alles dran ist, dann fragt man sich natürlich, ob das wirklich sein muss. :)

Naja, schönen Abend noch! :)

Antwort bewerten Vielen Dank für Deine Bewertung
Eisenkoenig 08.10.2016, 09:28

Ich habe nicht genau verstanden was dein 100 Zeilen C++ Programm genau macht. Es kürzt irgendwas?
Und was kann dein Webbrowser, den du mit C geschrieben hast so?
Ist das ein bisschen mit Firefox zu vergleichen?

Sonst bedanke ich mich ganz herzlich bei Ihnen.
Schönen Tag noch^^

0

also ich habe mal spaßeshalber eine version von 2048 geschrieben. die hat so etwa 20kb(ohne bilder da ich bilder als zahlen benutzt habe).

der speicherverbrauch kommt halt tatächlich hauptsächlich durch hochaflösende texturen und viele polygone zu stande. du musst bedenken dass flappy bird in der 4 fachen auflösung spielt und die hintergründe und sprites sehr hochauflösend sind. das ist nicht alles gamecode. das ist nur sehr wenig gamecode. aber ein normales bild sind nunmal schon 100kb oder mehr wenn du mal in deinen bilder ordner guckst :D. natürlich gibt es möglichkeiten datein zu komprimieren aber das wird heutzutage noch kaum gemacht da dadurch die bildqualität und/oder die performance leiden.

tatsächlich hat es auch mal wer geschafft(funktionierendes)flappy bird in mario rein zu programmieren nur mit dem orginal controller und den richtigen eingaben. das zeigt wie wenig code es braucht für flappy bird. waren nur 331 bytes :P. 




Antwort bewerten Vielen Dank für Deine Bewertung
Eisenkoenig 07.10.2016, 20:01

Nur 331Byte ? Omg

0
Eisenkoenig 07.10.2016, 20:10

Wenn ich es im Video richtig verstanden habe, hat man etwas vom Speicher des Spiels genommen in Form von z.B. Gravitation und den Speicher dann für etwas anderes benutzt.
Verstehe ich das richtig?
Und dann sind das halt 332Bytes, aber würde man Flappy Bird komplett ohne vordefinierte Funktionen schreiben, wäre das Spiel Flappy Bird an sich doch viel größer oder ?

0
jort93 07.10.2016, 21:09
@Eisenkoenig

ja. aber trozdem sind der größte teil des spiels nur texturen und sprites. gamecode selber ist meißtens der weitaus kleinste teil.

0
jort93 07.10.2016, 21:26
@jort93

das sind jetzt 1.5kb. wenn ich das noch mit winrar (verlustlos) komprimiere sind das nur noch 715 byte :P

0
Eisenkoenig 07.10.2016, 22:00

Alles Klar^^
Danke für die Links

0

Hast du nur mal die Grafik der alten Spiele mit den neuen verglichen?

Die ist doch deutlich besser, erfordert aber dadurch auch viel mehr Daten und Code, und somit auch mehr Speicherplatz.

Antwort bewerten Vielen Dank für Deine Bewertung

In den frühen Zeiten der Computer musste man wirklich noch sehr sparsam mit Speicher umgehen.

In den letzten Jahrzehnten sind aber Speicherelemente sehr viel billiger und die Computer viel schneller geworden. Deshalb machen sich heutige Spiele-Entwickler wohl kaum mehr Gedanken über den Speicherbedarf der Spiele. Sie versuchen viel mehr, die Spiele durch graphische Effekte (hinter denen eigentlich eine gewaltige Rechner- und Speicherleistung steckt) attraktiver zu machen. Für den eigentlichen Spielspass bringt das zwar nicht wirklich viel, aber es ist eben "in" und kostet geldmäßig gar nicht mehr so viel.

Tatsächlich sprichst du aber ein sehr wichtiges Problem an, das auch weit über die Welt der Computerspiele hinausgeht:  Heutzutage ist vermutlich ein sehr großer Teil der gesamten Computerleistung auf der ganzen Welt reine Verschwendung. Effektiv könnten wir, wenn wir uns auf notwendige Inhalte beschränken würden, mindestens 90% der aktuellen Computerleistung sparen. Die globale Vermüllung des Internets (das an sich ein ganz tolles Kommunikationsnetz ist) ist katastrophal. Durch massenweise Spam, Malware und Virensoftware wird das Netz extrem und oft fast bis zum Zusammenbruch belastet - und niemand von den wirklichen Nutzern hat etwas davon, außer den geldgierigen und zum Teil kriminellen Organisationen, die daraus ihre Gewinne ziehen.

Antwort bewerten Vielen Dank für Deine Bewertung
Eisenkoenig 07.10.2016, 19:59

Endlich mal ein Informativer Beitrag.

So habe ich das nich gar nicht betrachtet. 90% sind ja unglaublich viel müll und wenn man mal überlegt wie viel ein 8Gb USB Stick im Laden kostet im Gegensatz zu einem 4Gb finde ich, ist das eine Menge Geld die hier verloren geht.
Fallen dir noch Beispiele ein ?
Ich finde es einfach toll sich über dieses Thema zu unterhalten :)

0

Die Grafik der neueren Spiele hat zB eine bessere Auflösung als damalige Spiele. Das allein sorgt schon dafür, dass mehr Speicherplatz benötigt  wird. LG 

Antwort bewerten Vielen Dank für Deine Bewertung

Das stimmt, aber heutzutage ist der Speicher auch schon viel größer.

Wo damals 5 MB ultra viel waren gibt es heute sogar schon Internetleitungen mit Gigayte geschwindigkeit und speicher mit 38Terrabyte.
Wofür der Speicher jetzt genutzt wird weis ich nicht, aber was ich weis ist das sich die Technologie in den letzten 20 Jahren so schnell entwickelt hat wie es niemals(und ich meine wirklich NIEMALS) zuvor passiert ist.

Mfg

Antwort bewerten Vielen Dank für Deine Bewertung

Grafik und zustätzliche funktionen (Multiplayer, etc)

Antwort bewerten Vielen Dank für Deine Bewertung

Komplexere Engines, höhere Polygonendichte usw.

Time changes ;)

LG

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?