2009-10-28 3 views
1

Comment l'appel malloc est-il géré par la bibliothèque de l'utilisateur. J'ai besoin de l'explication de "Comment la mémoire est allouée dans l'espace utilisateur quand on appelle malloc Qui le gère Comme sbrk() est appelé pour entrer dans l'espace du noyau".Allocation dynamique de la mémoire

+10

Vous allez devoir expliquer ce que vous voulez dire. –

+3

... et cherchez SO, vous pouvez juste trouver ce dont vous avez besoin! – dirkgently

Répondre

4

Le paquet malloc() des fonctions gère l'espace. Il obtient des morceaux de mémoire relativement importants du système en utilisant sbrk() et transmet des morceaux plus petits à ses appelants comme demandé, en utilisant n'importe lequel des nombreux algorithmes possibles qu'il est conçu pour utiliser. La fonction free() replace la mémoire libérée dans sa liste de mémoire «disponible pour l'utilisation». Très rarement, il libère réellement la mémoire au système d'exploitation lui-même.

Il y a beaucoup d'articles sur la conception des différentes versions de malloc(). Il y a beaucoup de versions de débogage de malloc(), en particulier, qui recherchent des abus de la mémoire allouée. Vous pouvez lire sur l'allocation de mémoire dans Knuth 'L'art de la programmation informatique'; c'est dans le volume 1 de ma mémoire.

6

La bibliothèque d'exécution C gère le tas. Le tas a un magasin libre préalloué. Si le moteur d'exécution ne trouve pas de bloc contigu, il essaie de demander plus de mémoire au système d'exploitation - appelle sbrk().

Si ce dernier échoue « de mémoire » est rapportée - malloc() renvoie un pointeur NULL. Si la mémoire supplémentaire est demandée avec succès et le morceau reçu est plus grand que ce que l'appelant a demandé malloc() pour le bloc en bloc est divisé - une partie est marqué comme occupé et retourné à l'appelant et l'autre est ajouté au magasin gratuit.

A partir du moment où sbrk() retourné avec succès le morceau de mémoire appartient à l'espace d'adressage du programme appelant.