Sparen statische Variablen in Klassen RAM?
-
Hallo Leute Ich programmiere gerade an einem Spiel und habe daher eine kleine Frage. Wenn ich eine Klasse habe, von der ich immer nur ein Objekt brauche (z.B. Klassen zum einlesen von externen Dateien), soll ich dann die ganzen Variablen in dieser Klasse statisch machen, um RAM zu sparen?
Also wenn ich zwei Objekte einer Klasse mit statischen Variablen habe, verbrauch ich dann ca. halb soviel RAM wie wenn die Variablen nicht statisch wären
Wird dann nur eine statische Variable angelegt, oder 2 Variablen die ständig miteinander Kommunizieren/Werte gleichsetzenSorry, die Frage ist wahrscheinlich total überfallig aber ich bin noch in meinen Startschritten und brauche etwas Unterstützung Danke im voraus für eure Hilfe
-
Die statische Variable exisitiert dann nur einmal. Du sparst also Speicherplatz.
Wenn du also eine Klasse hast, welche eine Datei einließt und diese dann im RAM speichert, dann wäre static speicherplatzsparend.
Du solltest aber lieber nicht die Variablen(Attribute) der Klasse statisch machen.
Machs lieber so:
class DateiLader { char * dateiInhalt; } class Level { static DateiLader lader; // Erst hier wird die gesamte Klasse statisch gemacht }
Mein Tipp: Dateien in statischen Variablen speichern kann dich in Teufelsküche bringen. Stell dir mal vor, du hast eine Config-Datei und denkst dir: Die mach ich statisch. Dann stellst du paar Wochen/Monate später fest, du brauchst zwei Configs. Eine fürs testen, eine fürs Spiel. Du willst beide gleichzeitig einladen könnten und dann mit switch-Case die Config-Klasse auswählen. Wäre deine Config-Klasse statisch, dann hättest du spätestens JETZT ein Problem
-
Erstens lohnt es sich nicht einmal über so etwas nachzudenken und zweitens spart das gar nichts. Statische Variablen belegen permanent Speicher, während lokale Variablen den nur vorübergehend brauchen würden.
-
Wird dann nur eine statische Variable angelegt, oder 2 Variablen die ständig miteinander Kommunizieren/Werte gleichsetzen
Statische Variablen sind eigentlich "versteckte" globale variablen.
d.h. die variable wird wie alle anderen globalen variablen angelegt ...
Membervariablen werden hingegen mit der Klasse bei jeder instanz erzeugt.
Also statische variablen gehören nicht zur KlassenInstanz sondern global zur klasse generell.Die Frage ist eher ob RAM verbrauch nen gutes argument dafür ist ^^
RAM ist bei C++ viel seltener das Problem als wie Performance. Oft opfert man soweiso sehr gern viel RAM für mehr Performance ... Zumindest heutzutage
Problem ist in solchen fällen eher die mehrfache zuweisung des wertes.Aber generell ... gilt der Wert einer Variable für alle Ihre Instanzen, ist es zulässig, diese variable static zu machen ...
Wobei man in solchen Fällen eher Konstanten als Variablen hat ^^Ciao ...
-
statische Variablen liegen in einem speziellen Segment des Prozesses.
Dort liegen sie während der gesamten Laufzeit. So gesehen: du sparst keinen Speicher. Allerdings sparst du dir, dass die Konstanten jedes Mal auf den Stack (oder Heap) gegeben werden, wenn du ein Objekt anlegst.Könnte also eventuell Sinn machen wenn du eine Klasse hast die du in einer Liste millionenfach drinnen hast. Dann macht es natürlich Sinn, eine Konstante nicht in jedem Objekt liegen zu haben, sondern nur ein einziges Mal im Speicher.
Aber generell ist RAM heute nicht mehr so das Thema, gerade mit C++ bist du eh speichersparsam am Weg. Starte Mal ein C# oder Java Programm und vergleiche
Meiner Erfahrung nach bringen die Mikrooptimierungen (fast) nichts. Wirklich viel rausholen konnte ich bis jetzt immer nur durch Ersetzen schlechter Algorithmen (z.B. lineare Suche vs. binäre Suche).
Jedenfalls solltest du dir mal ansehen, wie ein Prozess ("laufendes Programm") im Speicher aussieht. Das hilft vielleicht auch, solche Dinge in Zukunft selber einschätzen zu können.
Ein Anfang wäre z.B. hier nachzulesen: http://www.geeksforgeeks.org/memory-layout-of-c-program/
-
Mafyou schrieb:
Also wenn ich zwei Objekte einer Klasse mit statischen Variablen habe, verbrauch ich dann ca. halb soviel RAM wie wenn die Variablen nicht statisch wären
jap, halb soviel speicher in dem fall.