« Programmation C/Gestion de la mémoire » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎<code>realloc</code> : prototype + reformulation
Ligne 14 :
Les déclarations de variables en C et dans beaucoup d'autres langages ont une limitation très importante : la taille des variables doit être connue à la compilation. Cela pose problème quand on ne sait qu'à l'exécution le nombre de données qu'on doit traiter. Pour résoudre ce problème, et pouvoir décider durant l'exécution d'un programme du nombre de variables à créer, il faudra nécessairement passer par de l'allocation dynamique de mémoire. Avec ce système, le programmeur dispose de fonctions qui permettent de demander au système une zone mémoire d'une certaine taille, qu'il pourra utiliser comme il le souhaite. En C, ces fonctions sont disponibles dans l'en-tête <tt>stdlib.h</tt>.
 
L'un des principaux avantages qu'offre le langage C est sa capacité à fournir au programmeur un contrôle poussé sur la gestion de la mémoire. Cette liberté laissée au programmeur a malheureusement sa contrepartie... En effet, contrairement à d'autres langages, le C ne possède ni garde-fous ni routines ([[w:ramasse-miettes|ramasse-miettes]] ou ''garbage collector'') chargés de gérer la mémoire. Une part conséquente des erreurs de programmation a pour origine une mauvaise utilisation des fonctions de gestion de la mémoire.
 
Un ordinateur possède une zone mémoire découpées en secteurs. Chaque secteur est identifié par une adresse (un numéro en quelque sorte). Le système d'exploitation installé sur la machine possède une table dans laquelle sont référencées toutes les adresses mémoires auxquelles il peut accéder. Le système utilise et met à jour cette table en permanence, ce qui lui permet de savoir quels secteurs sont libres et quels secteurs sont réservés. Un secteur est dit réservé si son accès est limité à un processus particulier le temps de son exécution. Cette gestion est capitale pour le système car elle empêche (pour peu qu'on l'utilise convenablement...) qu'un programme vienne écrire sur les zones mémoire utilisées par un autre.