Résumé
malloc est en informatique une fonction de la bibliothèque standard du langage 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 . Dans les systèmes GNU/Linux, elle fait partie du paquet GNU C Library. L'allocation de mémoire pour un programme peut s'effectuer de trois manières : statiquement, au cours de la compilation par la déclaration de variables statiques : variables globales ou variables locales déclarées en utilisant le mot-clé static, dynamiquement, au cours de l'exécution : soit de façon automatique sur la pile d'exécution : variables locales déclarées dans un bloc d'instructions, soit à la demande sur le tas : en utilisant des fonctions d'allocation de la mémoire. 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. Avec l'allocation automatique, la libération de la mémoire n'est réalisée qu'à la fin du bloc d'instructions 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, 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, mais ce n'est pas le cas du langage C.
À propos de ce résultat
Cette page est générée automatiquement et peut contenir des informations qui ne sont pas correctes, complètes, à jour ou pertinentes par rapport à votre recherche. Il en va de même pour toutes les autres pages de ce site. Veillez à vérifier les informations auprès des sources officielles de l'EPFL.
Cours associés (11)
CS-119(c): Information, Computation, Communication
L'objectif de ce cours est d'introduire les étudiants à la pensée algorithmique, de les familiariser avec les fondamentaux de l'Informatique et de développer une première compétence en programmation (
ENG-270: Computational methods and tools
This course prepares students to use modern computational methods and tools for solving problems in engineering and science.
ME-213: Programmation pour ingénieur
Mettre en pratique les bases de la programmation vues au semestre précédent. Développer un logiciel structuré. Méthode de debug d'un logiciel. Introduction à la programmation scientifique. Introductio
Afficher plus
Séances de cours associées (41)
Attribution de mémoire dynamique en C++
Explore l'allocation dynamique de la mémoire en C, couvrant les fonctions malloc, calloc et realloc, en mettant l'accent sur la gestion appropriée de la mémoire et les tableaux dynamiques.
Principes de Localité
Explore l'impact de la localité sur la conception du système, en discutant des stratégies pour optimiser l'efficacité et la performance grâce à la mise en page des données, la conception des serrures et la minimisation des mouvements de données.
Attribution dynamique de la mémoire : bases et exemples
Explore l'allocation dynamique de la mémoire en C, couvrant la pile vs. mémoire de tas, fonctions d'aide, et des exemples pratiques.
Afficher plus
Publications associées (54)

A Mechanized Theory of the Box Calculus

Yichen Xu

Capture calculus is an extension of System Fsub that tracks free variables of terms in their type, allowing one to represent capabilities while limiting their scope. While previous calculi had mechanized soundness proofs, the latest version, namely the box ...
2023

RRT*-Based Algorithm for Trajectory Planning Considering Probabilistic Weather Forecasts

Maryam Kamgarpour, Eduardo Andres Enderiz

Convective weather and its inherent uncertainty constitute one of the major challenges in the air traffic management (ATM) system, entailing both safety hazards and economic losses. In the present work, we propose a stochastic algorithm for trajectory plan ...
2021

Associativity-agnostic in-cache computing memory architecture optimized for multiplication

David Atienza Alonso, Marina Zapater Sancho, Marco Antonio Rios

A random access memory array including a plurality of local memory group ways, each local memory group way including, a plurality of local memory groups, each local memory group including, a memory column including a plurality of memory cells, a pair of lo ...
2021
Afficher plus
Concepts associés (19)
Pointeur (programmation)
En programmation informatique, un pointeur est un objet qui contient l'adresse mémoire d'une donnée ou d'une fonction. C'est l'outil fondamental de l'adressage dit « indirect ». La notion de pointeur reflète l'utilisation différente que l'on peut faire d'un entier naturel, à savoir indiquer une adresse mémoire. Cette utilisation est très différente d'une utilisation arithmétique, d'où la création de registres de processeurs spécifiques (les registres d'adresse) et d'un type de donnée spécifique dans les langages de programmations.
Noyau de système d'exploitation
Un noyau de système d’exploitation, ou simplement noyau, ou kernel en anglais, est une des parties fondamentales de certains systèmes d’exploitation. Il gère les ressources de l’ordinateur et permet aux différents composants — matériels et logiciels — de communiquer entre eux. En tant que partie du système d’exploitation, le noyau fournit des mécanismes d’abstraction du matériel, notamment de la mémoire, du (ou des) processeur(s), et des échanges d’informations entre logiciels et périphériques matériels.
OpenBSD
OpenBSD est un système d'exploitation libre de type Unix, dérivé de 4.4BSD. Créé en 1994 par Theo de Raadt, il est issu de la séparation avec NetBSD, le plus ancien des trois autres principaux systèmes d'exploitation de la famille des BSD aujourd'hui en activité. Le projet OpenBSD est réputé pour son intransigeance sur la liberté du logiciel et du code source, la qualité de sa documentation, et l'importance accordée à la sécurité et la cryptographie intégrée.
Afficher plus