Comment STL carte alloué? Pile ou le Tas?
Je voudrais savoir si le TSL map
en c++ a contigus en mémoire ou la mémoire affectée au tas?
Ce que la question a à voir avec "l'alignement"?
Vous ne pouvez pas utiliser la "pile" de la mémoire pour
Mon custom
Je ne pense pas que nous pensons de la même signification pour le mot "pile". 😛 je parle du CPU pile, pas juste quelque chose qui ressemble à une pile. Mais en fait, j'ai eu la pensée de faire quelque chose qui alloue dans une pile. Est le but de votre allocateur de fournir une allocation efficace lorsqu'elles se produisent dans un pile-comme la mode? Si oui, auriez-vous l'esprit de partage? 😀 Écriture allocateurs est une douleur...
Est-il une raison particulière pour vous. Peut-être nous pouvons vous aider plus, si vous expliquez pourquoi vous voulez savoir.
Vous ne pouvez pas utiliser la "pile" de la mémoire pour
map
, c'est impossible.Mon custom
stack_allocator
voudrais dire un mot. 😛Je ne pense pas que nous pensons de la même signification pour le mot "pile". 😛 je parle du CPU pile, pas juste quelque chose qui ressemble à une pile. Mais en fait, j'ai eu la pensée de faire quelque chose qui alloue dans une pile. Est le but de votre allocateur de fournir une allocation efficace lorsqu'elles se produisent dans un pile-comme la mode? Si oui, auriez-vous l'esprit de partage? 😀 Écriture allocateurs est une douleur...
Est-il une raison particulière pour vous. Peut-être nous pouvons vous aider plus, si vous expliquez pourquoi vous voulez savoir.
OriginalL'auteur Master Oogway | 2012-07-17
Vous devez vous connecter pour publier un commentaire.
Depuis
map
est un dynamique conteneur, la mémoire de ses éléments est allouée dynamiquement (quoi que cela signifie (cela dépend de l'configurable allocateur)!).En outre,
map
est un basées sur les nœuds conteneur, de sorte que chaque élément va dans une partie distincte, séparée de l'allocation (de manière à permettre le maximum d'itérateur de référence et non d'invalidation). Les éléments sont presque certainement pas contiguës en mémoire, et, probablement, éparpillés dans une manière qui reflète la façon dont vous les avez ajoutées.Pratiquement, un plan sera mis en œuvre un certain type d'équilibre de l'arbre pour atteindre logarithmique de recherche, d'insertion et de suppression.
(Si vous souhaitez une structure de données avec stockage contigu et logarithmique de recherche de temps, considérons un vecteur trié.)
Ils peuvent facilement être contiguë à une
stack_allocator
qui prend de la mémoire tampon d'entrée à allouer à partir, mais ils ne peuvent pas être dans l'ordre de tri à l'intérieur de la mémoire.Il y a probablement un nœud de frais généraux dans chaque nœud, ce qui signifie que les données réelles sont probablement jamais contigus.
Certes, les liens entre les nœuds pour l'itération.
OriginalL'auteur Kerrek SB
Il est plus que probable que la mise en œuvre spécifique, et yous pouvez certainement changer
l'allocateur de tout conteneur STL, mais ce n'est pas pour les faibles de cœur, et vous auriez besoin de regarder la documentation de la bibliothèque standard que vous utilisez.
En tout cas, la carte est généralement mis en œuvre comme un rouge-noir arbre et nœuds d'une arborescence sur le tas.
(Les nœuds de l'arborescence, si je comprends bien, contiennent les instances de value_type, qui sont des paires clé/valeur de votre carte).
Noter que la pile est un mauvais stockage idée pour un conteneur de pile doit être considéré comme une ressource rare.
OriginalL'auteur