Question

J'ai une question (potentiellement stupide) sur la STL C++.Lorsque je crée un conteneur (vecteur, ensemble, carte, etc.), est-il alloué sur la pile ou sur le tas ?Si je crée un ensemble et mets 5 millions de chaînes, devrai-je m'inquiéter d'un débordement de pile ?

Était-ce utile?

La solution

Les classes STL allouent par défaut leurs tampons internes à partir du tas, bien que ces classes autorisent également des allocateurs personnalisés qui permettent à un utilisateur de spécifier un autre emplacement à partir duquel allouer - par exemple.un pool de mémoire partagée.

Autres conseils

L'allocateur par défaut pour les conteneurs STL utilise les opérateurs new et delete, il s'agit donc de la destination du type contenu.(En général, cela vient du tas, sauf si vous faites quelque chose pour le remplacer.)

Vous n'obtiendrez pas de débordement de pile en allouant 5 millions de chaînes.Même si vous créiez un allocateur basé sur la pile, il déborderait probablement avant même d'insérer une chaîne.

Le conteneur lui-même est alloué là où vous décidez (il peut s'agir de la pile, du tas, du membre d'un objet, etc.) mais la mémoire qu'il utilise est, par défaut, comme d'autres l'ont décrit, prise sur le Free Store (gérée via new et delete) ce qui n'est pas la même chose que le tas (géré via malloc/free).

Ne mélangez pas les deux !

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top