« Programmation C/Gestion de la mémoire » : différence entre les versions
Contenu supprimé Contenu ajouté
→<code>calloc</code> : allocation avec initialisation à 0 : précision pour les types flottants et pointeur |
|||
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é
La manière dont la mémoire physique d'un ordinateur est conçue, ainsi que la façon dont le système d'exploitation la manipule, sont très variables. Cependant,
* Indépendance totale de l'espace d'adressage entre les processus : un processus ne peut pas accèder à la mémoire d'un autre processus. C'est pourquoi transmettre la valeur d'un pointeur à un autre processus ne servira en général à rien, car le second processus ne pourra jamais accéder à l'emplacement pointé.
* Gestion fine de la mémoire : les segments sont accèdés via plusieurs niveaux d'indirection dans les tables de pages. Cela permet de mettre virtuellement les segments n'importe où dans la mémoire ou même sur un système de fichier. Dans la pratique, éparpiller trop les segments (fragmenter) réduit significativement les performances.
Au niveau des inconvénients, on citera essentiellement un problème de performances. Plusieurs niveaux d'indirection impliquent de multiple lectures en mémoire, extrêmement pénalisant en terme de temps d'exécution, au point où des caches sont nécessaires pour garantir des vitesses acceptables. Même si RAM veut dire mémoire à accès aléatoire, il faut bien garder à l'esprit qu'un accès purement séquentiel (adresse mémoire croissante) peut être jusqu'à cent fois plus rapide qu'une méthode d'accès qui met sans cesse à défaut ce système de cache.
Un processus peut donc demander au sytème de réserver pour son usage exclusif un secteur mémoire de taille déterminée. Il peut également demander au sytème de modifier la taille d'une zone précédemment réservée ou de la libérer s'il n'en a plus l'utilité.
|