Speicher Flashcards
CPU Register
- ein schneller kleiner Speicher im Prozessorkern
- dient der Speicherung von zwischen werten und ist die Quelle für die operationseinheiten
- Register teilweise Funktionsspezifisch:
- > PC programmzähler
- > SP Stack Pointer
- > General purpose Register
- direkter Zugriff nur Assembler möglich
Cache Speicher
- Pufferspeicher die wiederholte Zugriffe auf ein langsames hintergrundmedium beschleunigen
- bereits gelesene Daten verbleiben im Cache und können beim nächsten zugriff schneller geholt werden
- Nutzung des Lokalitätsprinzips
- > zeitliche Lokalität: wiederholte Anforderung von Daten
- > räumliche Lokalität: Anforderung von benachbarten Daten
Adressraum
Für die Speicherung von Daten und programmtext wird jedem Prozess Speicherplatz (Adressraum) zur Verfügung gestellt.
- Speicher eines Prozessors hat feste Struktur:
- > temporärer Speicher (Stack)
- > dynamischer Speicher (Heap)
- > Programmspeicher (Text)
Programmspeicher
Umfasst gesamten programmtext des Programms
- kann vom Programn nicht verändert werden
- hat feste Größe
- beim starten des Programms wird es vom Betriebssystem gefüllt
Dynamischer Speicher (heap)
Umfasst die Daten des Programms die explizit angefordert wurden. Wird idR über Text Bereich gelegt
- unterteilt sich in drei Segmente:
- > bss: enthält alle initialisierten, nicht konstanten Speicherbereiche
- > rodata: enthält alle Konstanten Variablen
- > data: enthält alle uninitialisierten Speicherbereiche
-Größe kann während der Laufzeit des Programms verändert werden
Temporärer Speicher
Temporärer genutzter Speicherplatz wird auf einem stapelspeicher (stack) bereitgestellt
- Größe ändert sich ständig während der Laufzeit
- wird ganz oben im Adressraum abgelegt
- Stack wächst von oben nach unten
-zwischen heap und Stack keine physische Grenze, so dass beide Bereiche ineinander wachsen können
Speicherklassen
Jeder Variable in C hat drei Eigenschaften die mittels speicherklassen festgelegt werden
- Lebensdauer: ab wann und wie lange eine Variable während der Ausführung eines Programms im Speicher existiert
- Gültigkeitsbereich: für welchen Teil des Programms eine Variable sichtbar ist
- Verbindung: inwieweit eine Variable von verschiedenen Programmteilen oder Modulen gemeinsam benutzt werden kann.
Globale Variablen
Werden außerhalb einer Funktion definiert
- sind von jeder Funktion der C Datei zugreifbar
- werden immer initialisiert : explizit mit einem Wert im programmtext. Implizit mit null beim programmstart
- Lebensdauer über die gesamte Programmlaufzeit
- Speicher wird auf dem Heap bereitgestellt
- können von verschiedenen Funktionen manipuliert werden
Lokale Variablen
- innerhalb einer Funktion bzw. eines Blockes definiert
- sind nur innerhalb des Blocks sichtbar
- werden nicht initialisiert: Inhalt der Variable zufällig. Initialisierung muss im Programm erfolgen
- Variable wird gelöscht wenn Block verlassen wird
- Speicher wird auf Stack bereitgestellt
Blockstruktur in C
- Blöcke bilden in C zugehörige programmbereiche.
- werden in geschweifte Klammern gefasst
- Variablen am Beginn eines Blockes deklariert
- Blöcke übernehmen Variablen aus Blöcken in denen sie stehen
- > Variablen können sich gegenseitig überdecken
Speicherklasse register
- Variablen können in CPU Register gehalten werden
- Daten werden nicht in den Hauptspeicher geschrieben (außer es sind keine Register frei)
- nur Datentypen erlaubt die von CPU Register unterstützt werden
- c erlaubt nicht die Auswahl eines spezifischen Registers
Speicherklasse volatile
- Variablen werden nach jedem Zugriff mit dem Hauptspeicher synchronisiert
- Nutzung:
- > bei gemeinsamen Variablen
- > bei Zugriff auf IO-Resourcen
- Compiler nimmt keine Optimierung bei volatile Variablen vor
Speicherklasse static
Lokale Variablen werden nach dem verlassen des Blocks nicht gelöscht
- Variablen existieren solange das Programm läuft : sie behalten ihren Wert nach verlassen des Blocks
- sind nur lokal sichtbar
- beim programmstart mit null initialisiert
Speicherklasse extern
- globale Variablen deren Sichtbarkeit nicht mittels static eingegrenzt wurde, können mittels des Schlüsselwortes extern exportiert werden
- Deklaration einer Variable als extern ist keine Definition der Variable
- exportieren von Variablen:
- > definieren der Variable in einem C Datei
- > deklarieren der Variable als extern im zugehörigen Header
- > Einbinden des Headers in einer anderen c Datei
Felder (Arrays)
Eine Datenstruktur, die mehre Objekte zusammenfasst. Ein homogenes Feld besteht aus Objekten des selben Datentyps
- c unterstützt nur homogene Felder
- man unterscheidet dynamische und statische Arrays:
- > Größe statischer arrays steht zur Compile Zeit fest
- > dynamische arrays können zur Laufzeit verschiedene Größen haben
- speichern Daten in einen zusammenhängenden Speicherbereich