Malloc et des Pointeurs Void

Je suis étudiant cette fonction de malloc et je pourrais utiliser un peu d'aide:

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;
 }

Je sais que le malloc func alloue de l'espace mémoire pour n'importe quel type, si il y a assez de mémoire, mais les lignes que je ne comprends pas:

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

Comment peut-il point à tout type de données de ce genre? Je ne peux pas comprendre que le vide de pointeur ou de son emplacement.

REMARQUE: malloc_ptr est un unsigned long

Ce code contient l'hypothèse qu'un pointeur vers unsigned long (c'est à dire malloc_ptr) peut aussi le point de tout autre objet, à partir d'un alignement de point de vue. Cette hypothèse n'est pas toujours vrai (par exemple, sur certains systèmes, il peut ne pas être en mesure de point à long double objets).
Le code suppose que personne n'a une plus strictes, de l'alignement de l'exigence que les 4 octets de l'alignement. Le code ne montre pas comment free_mem_ptr et free_mem_end_ptr sont initialisés. Il ne renvoie pas NULL quand il n'y a pas plus d'espace. Si la fonction error() retourne, puis l'enfer se déchaîne.

OriginalL'auteur morcillo | 2012-12-25