Partager via


Gestion de la mémoire : Allocation d’images

L’allocation sur le frame prend son nom à partir du « frame de pile » configuré chaque fois qu’une fonction est appelée. Le frame de pile est une zone de mémoire qui contient temporairement les arguments de la fonction ainsi que toutes les variables définies localement dans la fonction. Les variables frame sont souvent appelées variables « automatiques », car le compilateur alloue automatiquement l’espace pour eux.

Il existe deux caractéristiques clés des allocations d’images. Tout d’abord, lorsque vous définissez une variable locale, suffisamment d’espace est alloué sur le frame de pile pour contenir la variable entière, même s’il s’agit d’un grand tableau ou d’une structure de données. Deuxièmement, les variables d’image sont automatiquement supprimées lorsqu’elles sortent de l’étendue :

void MyFunction()
{
   // Local object created on the stack
   CString strName;
   // Object goes out of scope and is deleted as function ends
}

Pour les variables de fonction locale, cette transition d’étendue se produit lorsque la fonction quitte, mais l’étendue d’une variable frame peut être inférieure à une fonction si des accolades imbriquées sont utilisées. Cette suppression automatique des variables d’images est très importante. Dans le cas de types primitifs simples (tels que int ou octets), de tableaux ou de structures de données, la suppression automatique récupère simplement la mémoire utilisée par la variable. Étant donné que la variable est hors de portée, elle n’est pas accessible de toute façon. Toutefois, dans le cas d’objets C++, le processus de suppression automatique est un peu plus compliqué.

Lorsqu’un objet est défini en tant que variable d’image, son constructeur est automatiquement appelé au moment où la définition est rencontrée. Lorsque l’objet sort de la portée, son destructeur est automatiquement appelé avant la récupération de la mémoire de l’objet. Cette construction et destruction automatiques peuvent être très pratiques, mais vous devez être conscient des appels automatiques, en particulier pour le destructeur.

L’avantage clé de l’allocation d’objets sur le frame est qu’ils sont automatiquement supprimés. Lorsque vous allouez vos objets sur le cadre, vous n’avez pas à vous soucier des objets oubliés provoquant des fuites de mémoire. (Pour plus d’informations sur les fuites de mémoire, consultez l’article Détection des fuites de mémoire dans MFC.) Un inconvénient de l’allocation d’images est que les variables d’image ne peuvent pas être utilisées en dehors de leur portée. Un autre facteur dans le choix de l’allocation d’images par rapport à l’allocation de tas est que pour les structures et objets volumineux, il est souvent préférable d’utiliser le tas au lieu de la pile pour le stockage, car l’espace de pile est souvent limité.

Voir aussi

Gestion de la mémoire