CodeGym /Kurse /Python SELF DE /Arbeitsspeicher und Datenrepräsentation

Arbeitsspeicher und Datenrepräsentation

Python SELF DE
Level 52 , Lektion 1
Verfügbar

8.1 Arbeitsspeicher

Der Arbeitsspeicher (RAM) eines Computers ist ein Array von Speicherzellen, von denen jede eine einzigartige Adresse hat. Diese Zellen können Daten verschiedener Typen speichern, wie z.B. Zahlen, Zeichen und Zeiger. Wenn ein Programm ausgeführt wird, speichert es seine Daten und Anweisungen in diesem Speicher für den schnellen Zugriff.

Beispiel von Speicherzellen:

0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79

Jede Zelle hat ihre eigene Seriennummer, die auch Speicherzellenadresse oder einfach Adresse genannt wird. Wenn dein Computer 8 GB Speicher hat, dann hat er 8 Milliarden dieser Zellen, in denen du nützliche Dinge speichern kannst.

Bits und Bytes

Jede Zelle kann einen Byte Informationen speichern. Ein Byte besteht aus 8 Bits, und jedes Bit kann nur 0 oder 1 enthalten. Beispiel (für positive ganze Zahlen):

Zahl Bit-Darstellung Gerundet auf Byte
0 0 00000000
1 1 00000001
100 1100100 01100100
1000 1111101000 00000011-11101000
1000 000 000 111011100110101100101000000000 00111011-10011010-11001010-00000000

Je mehr Bytes eine Variable belegt, desto mehr Werte kann sie speichern. Beispiel:

  • 1 Byte — 256 einzigartige Werte
  • 2 Bytes — 65 Tausend einzigartige Werte
  • 3 Bytes — 16 Millionen
  • 4 Bytes — 4 Milliarden

8.2 Wie Daten im Speicher dargestellt werden

Datentypen und ihre Darstellung

Numerische Daten innerhalb der CPU und im Speicher

  • Ganze Zahlen: werden im Binärformat gespeichert. Die Größe kann variieren (1 Byte, 2 Bytes, 4 Bytes).
  • Floating-Point-Zahlen: werden im Gleitkommaformat gespeichert (z.B. das IEEE 754 Format für 4-Byte- und 8-Byte-Zahlen).

x = 42  # Ganzzahl
y = 3.14  # Gleitkommazahl

Wichtig! In Python sind die eingebauten Typen int und float vollwertige Klassen, die komplexe Berechnungen mit Zahlen beliebiger Länge durchführen können. Wenn du jedoch Bibliotheken für wissenschaftliche Berechnungen oder KI verwendest, wirst du genau diesen Datentypen begegnen, von denen ich gesprochen habe.

Zeichendaten im Arbeitsspeicher

Zeichen und Strings werden im Speicher als Byte-Sequenzen gespeichert. Zum Beispiel belegt in der ASCII-Kodierung jedes Zeichen 1 Byte, in der UTF-8-Kodierung kann es zwischen 1 und 4 Bytes sein.

In Python 3.x wird standardmäßig UTF-8 für Strings verwendet, aber du kannst Dateien lesen, in denen der Text in anderen Formaten gespeichert ist, oder Daten im Netzwerk verschicken, die nicht in UTF-8 kodiert sind.

Beispiel:


char = 'A'  # Zeichen
string = "Hallo, Welt!"  # String

Einzelne Zeichen haben in Python keinen eigenen Typ — für sie wird ebenfalls der Typ str verwendet. Im Speicher werden diese Strings jedoch zeichenweise gespeichert. Ein Zeichen belegt normalerweise 1—4 Bytes.

Zeiger

Zeiger speichern Adressen anderer Speicherzellen. Sie ermöglichen es Programmen, mit dynamischen Datenstrukturen zu arbeiten und den Speicher effizienter zu verwalten.

Beispiel:


list = [1, 2, 3, 4]  # Liste
list_pointer = id(list)  # Zeiger auf den Anfang der Liste

8.3 Beispiele für die Darstellung von Daten im Arbeitsspeicher

1. Darstellung ganzer Zahlen

Ganze Zahlen werden im Speicher als Binärzahlen (Bits) gespeichert. Abhängig vom Datentyp können sie eine unterschiedliche Anzahl von Bytes belegen. Zum Beispiel belegt int normalerweise 4 Bytes (32 Bits).

So wird die Zahl 42 im Speicher dargestellt:

00000000 00000000 00000000 00101010

2. Darstellung von Gleitkommazahlen

Gleitkommazahlen (z.B. Typ float) werden im Speicher im Gleitkommaformat gespeichert, meist nach dem Standard IEEE 754. float belegt normalerweise 4 Bytes (32 Bits), während double 8 Bytes (64 Bits) belegt.

Wichtig! Dies sind Standard-Datentypen, die an Speicher und Prozessor gebunden sind. Der Typ float in Python entspricht dem allgemein gebräuchlichen Typ double und belegt 8 Bytes.

So wird die Zahl 3.14 im Speicher dargestellt:

01000000 01001000 11110110 01100110

3. Darstellung von Zeichen und Strings

Zeichen (z.B. Typ char) werden im Speicher als Byte-Sequenz gespeichert. Strings sind Arrays von Zeichen. In C/C++-Sprachen enden Strings mit einem Nullbyte (\0), aber in Python ist das nicht der Fall.

So wird der String Hello im Speicher dargestellt:

'H' 'e' 'l' 'l' 'o'

Was wiederum in Form von 0 und 1 dargestellt wird:

01001000 01100101 01101100 01101100 01101111

8.4 Adressierung dynamischer Speicher

Dynamischer Speicher wird während der Programmausführung je nach Bedarf zugewiesen und freigegeben. Alle Objekte, die du in Python erstellst, werden in diesem Speicher erstellt.

Es wird in 2 Typen unterteilt:

Heap: Speicherbereich, aus dem dynamische Objekte zugewiesen werden. Die Verwaltung dieses Speichers erfolgt über Zuweisungsfunktionen (z.B. malloc in C) und Freigabefunktionen (z.B. free in C).

Stack: Speicherbereich, der zur Speicherung lokaler Variablen und Funktionsaufrufdaten verwendet wird. Speicher wird automatisch beim Eintritt und Austritt aus einer Funktion zugewiesen und freigegeben.

Wiederum kann ich kein Beispiel in Python geben, da es zu hochsprachig für solche Vorgänge ist. Ich kann erneut ein Beispiel in C geben:


// Dynamische Speicherzuweisung für ein Array von 10 ganzen Zahlen
int *dynamic_var = (int *)malloc(sizeof(int) * 10); 

// Speicherfreigabe
free(dynamic_var);  

Speicheradressierung ist der Prozess der Bestimmung einer eindeutigen Adresse für jede Speicherzelle. Jede Adresse zeigt auf einen bestimmten Ort im Speicher, der Daten oder Anweisungen enthalten kann.

Arten der Adressierung

Physische Adressierung: direkter Zugriff auf die physischen Adressen der Speicherzellen. Wird durch die Hardware verwaltet (z.B. durch den Speichercontroller).

Virtuelle Adressierung: nutzt Mechanismen zur Speicherverwaltung, wie z.B. Paging oder Segmentierung, um Prozessen isolierte und geschützte Adressräume bereitzustellen.

2
Aufgabe
Python SELF DE, Level 52, Lektion 1
Gesperrt
Binäre Darstellung
Binäre Darstellung
2
Aufgabe
Python SELF DE, Level 52, Lektion 1
Gesperrt
Zahl in Dezimal umwandeln
Zahl in Dezimal umwandeln
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION