Allocateur (C++)
# Allocateur (C++)

En programmation C++, un allocateur (anglais : allocator) est un composant de la bibliothèque standard de C++ (Standard Template Library ou STL) qui gère les demandes d'allocation et de désallocation de la mémoire.

La bibliothèque standard fournit plusieurs structures de données, telles que les listes et les ensembles, communément appelées conteneurs. Un point commun parmi ces conteneurs est leur capacité à changer de taille pendant l'exécution du programme. Pour ce faire, des techniques d'allocation dynamique de la mémoire sont généralement employées. Les allocateurs gèrent toutes les demandes d'allocation et de désallocation de la mémoire pour un conteneur donné. La bibliothèque standard de C++ fournit des allocateurs génériques utilisés par défaut, cependant, des allocateurs personnalisés peuvent également être écrits par le développeur.

## Historique

Les allocateurs ont été inventés par Alexander Stepanov lors de la création de la Standard Template Library (STL). Ils ont été initialement conçus comme un moyen de rendre la bibliothèque STL plus flexible et indépendante au modèle mémoire C sous-jacent, permettant aux développeurs d'utiliser des pointeurs et des types de références personnalisés avec la bibliothèque. Cependant, dans le processus d'adoption de la STL dans le standard C++, le comité de standardisation a réalisé qu'une abstraction complète du modèle mémoire aurait eu des répercussions inacceptables sur les performances. Pour remédier à cela, les exigences ont été rendues plus restrictives. En conséquence, le niveau de personnalisation fourni par les allocateurs est plus limité que ce qui était prévu à l'origine par Stepanov.

## Allocateurs personnalisés

Néanmoins, il existe plusieurs scénarios où les allocateurs personnalisés sont désirables. Parmi les raisons les plus courantes pour écrire des allocateurs personnalisés figurent : l'amélioration des performances d'allocation en utilisant des zones mémoire, et l'encapsulation de l'accès à différents types de mémoires, comme la mémoire partagée ou la mémoire du ramasse-miettes. En particulier, les programmes avec de nombreuses et fréquentes allocations de petites quantités de mémoire peuvent bénéficier grandement d'allocateurs spécialisés, tant en termes de temps d'exécution que d'empreinte mémoire.

