Malloc

Malloc

malloc

malloc est en informatique une fonction de la bibliothèque standard du C permettant d'allouer dynamiquement de la mémoire. La libération de la mémoire ainsi réservée s'effectue avec la fonction free.

Cette fonction est déclarée dans le fichier d'en-tête stdlib.h.

Sommaire

Allocation de mémoire

Lors de l'exécution d'un programme, la mémoire peut être allouée de deux manières :

  • statiquement, par la déclaration de variable ;
  • dynamiquement, par des mécanismes fournis par le langage de programmation utilisé.

L'allocation statique oblige le développeur à connaître à l'avance la quantité de mémoire qui sera utilisée par le programme. C'est ainsi qu'un « gaspillage » de la mémoire peut survenir si l'on réserve trop de mémoire par rapport à ce dont le programme a véritablement besoin pour réaliser la tâche qui lui incombe. De plus, la libération de la mémoire n'est réalisée qu'à la fin du bloc d'instruction dans lequel est déclarée la variable, ce qui peut également être un facteur de gaspillage lorsque de la mémoire est allouée, mais n'est plus utilisée.

C'est ici que l'allocation dynamique de mémoire entre en jeu. La réservation de la mémoire se fait au cours de l'exécution du programme, mais la libération de cette mémoire n'est plus gérée par le compilateur/interpréteur, mais par le programmeur. Cela augmente la complexité du programme, mais la gestion de la mémoire est plus fine.

Si un programme alloue de la mémoire par malloc sans la libérer ensuite par free, on parle de fuite de mémoire. Pour éviter ce type de bug et faciliter l'écriture des programmes, certains langages disposent d'un mécanisme de ramasse-miettes.

Utilisation

Deux fonctions permettent de réserver et de libérer dynamiquement une zone de la mémoire : malloc pour la réservation, dont la déclaration est la suivante :

void *malloc(size_t size);

Le seul paramètre à passer à malloc est le nombre d'octets à allouer. La valeur retournée est l'adresse du premier octet de la zone mémoire alloué. Si l'allocation n'a pu se réaliser (par manque de mémoire libre), la valeur de retour est la constante NULL.

La libération de la mémoire précédemment allouée via malloc est assurée par la fonction free dont la déclaration est la suivante :

void free(void *ptr);

Le seul paramètre à passer est l'adresse du premier octet de la zone alloué et aucune valeur n'est retournée une fois cette opération réalisée.

Voici du code réservant 20 octets et le libérant immédiatement après si l'allocation a été effectuée.

char * pointeur = (char *) malloc(20 * sizeof(char)); //Allocation de 20 octets
if(pointeur == NULL)
{
    printf("L'allocation n'a pu être réalisée\n");
}
else
{
    printf("L'allocation a été un succès\n");
    free(pointeur); //Libération des 20 octets précédemment alloués
}

Fonctions analogues

calloc

La zone mémoire allouée par malloc n'est pas initialisée automatiquement. Cette initialisation peut être réalisée à l'aide de la fonction memset ou bien par le parcours de toute la zone mémoire. Avec la fonction calloc, cette phase d'initialisation n'est plus nécessaire, car la zone mémoire allouée est initialisée avec des 0.

La déclaration de calloc est la suivante :

void *calloc(size_t nmemb, size_t size);

Le paramètre nmemb est le nombre d'éléments que l'on désire réserver et size correspond à la taille en octets d'un élément. La valeur retournée est la même que pour malloc.

realloc

La fonction realloc permet de modifier la taille de la mémoire allouée préalablement avec malloc. S'il est nécessaire de déplacer la zone mémoire, car il n'y a pas assez de mémoire contiguë, la libération de l'ancienne zone mémoire est réalisée par realloc via free.

La déclaration de realloc est la suivante :

void *realloc(void *ptr, size_t size);

Le paramètre ptr désigne le début de la zone mémoire dont l'on désire modifier la taille. Le second paramètre, size, est la nouvelle taille en octet de la zone mémoire. La valeur retournée est le début de la zone mémoire alloué, ou NULL si la fonction a échoué.

Débogage

Débogage sous Windows

Des utilitaires graphiques permettent de vérifier que la mémoire utilisée est bien libérée lorsqu'elle n'est plus utilisée, comme c'est le cas avec MFC Debuging support qui est dédié à l'API MFC de Microsoft[1].

Débogage sous Unix

  • mtrace : commande Linux permettant de tracer les appels à malloc
  • Valgrind ou mpatrol : débogueurs permettant de détecter les fuites de mémoire et les écritures hors de la zone allouée par malloc

Débogage avec outils GNU

La bibliothèque logicielle DUMA aide à détecter indirectement les malloc ayant une taille trop petite ou trop grande.

Notes et références

  • Portail de la programmation informatique Portail de la programmation informatique
Ce document provient de « Malloc ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Malloc de Wikipédia en français (auteurs)

Игры ⚽ Нужен реферат?

Regardez d'autres dictionnaires:

  • Malloc — (от англ. memory allocation, выделение памяти) и calloc (от англ. clear allocation, чистое выделение (памяти)) функции выделения динамической памяти, входящие в стандартную библиотеку языка Си. Содержание 1 Описание функций …   Википедия

  • malloc — est en informatique une fonction de la bibliothèque standard de C permettant d allouer dynamiquement de la mémoire. La libération de la mémoire ainsi réservée s effectue avec la fonction free. Cette fonction est déclarée dans l en tête <stdlib …   Wikipédia en Français

  • Malloc — In computing, malloc is a subroutine provided in the C and C++ programming language s standard libraries for performing dynamic memory allocation. Rationale The C programming language manages memory either statically or automatically . Static… …   Wikipedia

  • Malloc — En informática, malloc es una subrutina para el ejercicio de asignación de memoria dinámica en los lenguajes de programación C y C++. Es una abreviatura del inglés Memory Allocation. Forma parte de la biblioteca estándar stdlib.h para ambos… …   Wikipedia Español

  • malloc — 1. noun A subroutine in the C programming languages standard library for performing dynamic memory allocation. It compares the behavior of nine different mallocs when used with Hummingbird and GNU Emacs dynamic memory activity traces. 2. verb …   Wiktionary

  • malloc — ● np. cde. ►LANGC►CMDE Contraction de Memory Allocation. Nom d une fonction très importante de la bibliothèque C, car elle permet d attribuer une partie de la mémoire à un processus. Voir aussi calloc. (D après [NM]) …   Dictionnaire d'informatique francophone

  • C dynamic memory allocation — C Standard Library Data types Character classification Strings Mathematics File input/output Date/time Localization …   Wikipedia

  • Pointer (computing) — This article is about the programming data type. For the input interface (for example a computer mouse), see Pointing device. Pointer a pointing to the memory address associated with variable b. Note that in this particular diagram, the computing …   Wikipedia

  • BEE Lisp — Значимость предмета статьи поставлена под сомнение. Пожалуйста, покажите в статье значимость её предмета, добавив в неё доказательства значимости по частным критериям значимости или, в случае если частные критерии значимости для… …   Википедия

  • Dangling pointer — Dangling pointers and wild pointers in computer programming are pointers that do not point to a valid object of the appropriate type. These are special cases of memory safety violations. Dangling Pointer Dangling pointers arise when an object is… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”