C++ Einführung
C++ Variablen im Speicher, Zeiger
C++ Texte etc.
C++ Dateien, Formatierte Ausgabe, ...
C++ OOP
Hilfe / Anhang
Downloads / Links
Partner
Fehler melden / Kontakt
Impressum
|
| Seite: [1] - Drucken |
Inhalt:
Speicher im Computer - in aller Kürze...
Bevor wir weiter programmieren, diese theoretische Einführung. Also zum Speicher:
Was ist Speicher?
Speicher steckt in Form von Festplatten oder RAM in deinem Computer. Die Festplatte interessiert uns hier nicht, dafür aber der Arbeitsspeicher: Hier kann man Variablen ablegen, der Programmcode und das Betriebssystem liegen während der Ausführung hier! Früher gab es, durch die damalige Rechnerarchitektur Limits von 64 KiB (8 Bit-Systeme), bei aktuellen 32 Bit-Systemen liegt sie bei 4 Gib und bei 64 Bit-Systemen bei ganzen 16 EiB!
Beim Ausschalten des Computers gehen alle Informationen des Arbeitsspeichers verloren. Daher müssen Daten auch auf Festplatten abgelegt werden. Arbeitsspeicher ist allerdings um einiges schneller als Harddisks und dient dem Prozessor als Raum für Daten.
Warum das Ganze?
Nun, wir haben bisher nur wenige Variablen gebraucht, die alle auf dem Stack gelandet sind. Der Stack ist allerdings nur ein kleiner Teil des Arbeitsspeichers, später wirst du aber möglicherweise mehr Speicher benötigen. Dazu musst du auf dem Heap Speicher reservieren (allokieren):
| Stack |
"normale" Variablen |
int i_test; |
| Code |
Der Code |
- |
| Register |
Steuerzeugs |
- |
| Heap |
freier Speicher |
| Globaler Speicher |
globale Variablen |
int i_globalevar; |
Normalerweise stehen als Stack nur ca. 8 MiB zur Verfügung!
Die Reservierung von Speicher auf dem riesigen(?) und dynamischen Heap ist allerdings etwas(!) langsamer und komplizierter, was uns aber immerhin einige Abstürze aufgrund von Stack-overflows erspart (dafür aber neue interessante Absturzmöglichkeiten eröffnet ). Und wenn man einmal das Prinzip verstanden hat, ist es auch ganz einfach und geht flott von der Hand.
Was ist den nun Speicher genau und wie arbeite ich damit?
Stell dir den Speicher einfach wie eine Stadt vor, eine ganz ordentliche Stadt, in der alle Häuser eine Addresse haben. Im Computer sehen diese Addressen z.B. so aus: (Die Werte variieren, da immer ein freier Speicher gesucht und genutzt wird! Die Werte liegen außerdem hexadezimal vor (0,1,2,...,8,9,a,b,...,f))
0x804a008 0x804a018
Hier lebt/liegt also etwas. Unser Programm muss sich also die Addresse merken, hinter der ein Haufen Daten liegt. Dazu gibt es "Pointer" (engl. Zeiger), die eine Addresse aufnehmen können. (Im nächsten Teil kommen wir dann darauf zurück...)
Jetzt legen wir hier also Daten ab, und können auf sie zugreifen! Aber wir müssen noch etwas bedenken, denn der reservierte Speicher wird nicht wieder freigegeben, dass müssen wir beim dynamisch allokierten Speicher selber machen! Andernfalls entstehen Speicherlecks! (Der Speicher wird erst nach einem Neustart wieder verfügbar...)
Speicherlecks verhindern
In der Praxis leichter, aber hier trotzdem die - etwas verwirrende - Theorie:
Um Speicherlecks zu verhindern haben manche Programmiersprachen, wie zum Beispiel Java, einen "Garbage Collector", der den Speicher automatisch freigibt. C++ kennt so etwas nicht direkt, man kann allerdings mit ein Paar Tricks Speicherlecks verhindern. Es gibt zum Beispiel "smart pointer", die den Speicher wieder freigeben, sobald der Gültigkeitsbereich des Pointers verlassen wird. Dies geschieht durch RAII (Resource Acquisition Is Initialization).
Das alles werden wir uns nun praktisch anschauen, damit wir endlich Wörter und Sätze einlesen können!
Wie geht's weiter?
Mit einer Einführung in die Speicherbeschaffung und deren Implementierung in C++: Pointer & Addressen!
|
| Seite: [1] - Drucken |
|