Malloc und Void-Zeiger

Studiere ich diese malloc-Funktion und ich könnte etwas Hilfe gebrauchen:

static void *malloc(int size)
  {
        void *p;

        if (size < 0)
                 error("Malloc error");
        if (!malloc_ptr)
                 malloc_ptr = free_mem_ptr;

        malloc_ptr = (malloc_ptr + 3) & ~3;     /* Align */

        p = (void *)malloc_ptr;
        malloc_ptr += size;

        if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr)
                 error("Out of memory");

        malloc_count++;
        return p;
 }

Ich weiß, dass die malloc-Funktion reserviert Speicher Platz für alle geben, wenn genügend Arbeitsspeicher vorhanden ist, aber die Zeilen, die ich nicht verstehe sind:

p = (void *)malloc_ptr;
malloc_ptr += size;

Wie kann es zeigen Sie auf einen beliebigen Datentyp wie das? Ich kann einfach nicht verstehen, dass void-Zeiger oder seine Lage.

HINWEIS: malloc_ptr ist ein unsigned long

Dieser code enthält die Annahme, dass ein Zeiger auf unsigned long (d.h. malloc_ptr) kann auch auf jedes andere Objekt, von einer Ausrichtung der Sicht. Diese Annahme ist nicht immer erfüllt (zum Beispiel, auf einigen Systemen kann es nicht in der Lage sein, auf long double Objekte).
Der code wird davon ausgegangen, dass kein Typ hat eine strengere Ausrichtung Anforderung als eine 4-byte-Ausrichtung. Den code nicht zeigen, wie free_mem_ptr und free_mem_end_ptr initialisiert werden. Es spielt keine NULL zurück, wenn dort kein Platz mehr ist. Wenn die Funktion error() gibt, dann bricht die Hölle Los.

InformationsquelleAutor morcillo | 2012-12-25

Schreibe einen Kommentar