Skip to content

Memory API (Speicherverwaltung in C)


📚 1️⃣ Speicherallokation in C

Die Speicherverwaltung in C kann entweder über den Stack oder den Heap erfolgen.

Stack (Automatische Speicherverwaltung)

  • Speicher für lokale Variablen wird automatisch reserviert und freigegeben.
  • Beispiel:

    void func() { 
        int x = 3;  // Speicher wird automatisch auf dem Stack reserviert
    }
    

Heap (Manuelle Speicherverwaltung mit malloc/free)

  • Speicher wird explizit mit malloc() angefordert und mit free() freigegeben.
  • Beispiel:

    int *x = malloc(sizeof(int) * 4);  // Speicherblock für 4 Ganzzahlen
    free(x);  // Freigabe des Speichers
    

⚠️ 2️⃣ Häufige Fehler bei der Speicherverwaltung

Vergessen, Speicher zu allokieren

    int *x = malloc(sizeof(int) * 4);  // Speicherblock für 4 Ganzzahlen
    free(x);  // Freigabe des Speichers

Korrekt:

    char *dst = malloc(strlen("hello") + 1);
    strcpy(dst, "hello");

Nicht genügend Speicher allokiert

    char *dst = malloc(strlen("hello"));  // ❌ Kein Platz für das Null-Terminierungszeichen!

Korrekt:

    char *dst = malloc(strlen("hello"));  // ❌ Kein Platz für das Null-Terminierungszeichen!

Vergessen, Speicher freizugeben (Memory Leak)

    int *x = malloc(sizeof(int) * 4);
// ❌ Falls free(x) nicht aufgerufen wird, bleibt der Speicher belegt!

Korrekt:

    free(x);

🛠️ 3️⃣ Erweiterte Speicherfunktionen

  • realloc() – Erweitert oder verkleinert einen bereits allokierten Speicherbereich.

c int *x = malloc(4 * sizeof(int)); x = realloc(x, 8 * sizeof(int)); // Größe verdoppeln

  • mmap() – Direktes Mapping von Speicherbereichen.
    void *ptr = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);