Pourquoi le tas d'exécution est-il utilisé pour l'allocation de mémoire dynamique dans les langages de style C et la structure de données appelée «le tas»? Y a-t-il une relation?
Pourquoi le tas d'exécution est-il utilisé pour l'allocation de mémoire dynamique dans les langages de style C et la structure de données appelée «le tas»? Y a-t-il une relation?
Réponses:
Donald Knuth dit (The Art of Computer Programming, Third Ed., Vol.1, p. 435):
Plusieurs auteurs ont commencé vers 1975 à appeler le pool de mémoire disponible un «tas».
Il ne dit pas quels auteurs et ne donne aucune référence à des articles spécifiques, mais dit que l'utilisation du terme «tas» par rapport aux files d'attente prioritaires est le sens traditionnel du mot.
Ils portent le même nom mais ils ne sont vraiment pas similaires (même conceptuellement). Un tas de mémoire est appelé un tas de la même manière que vous appelleriez un panier à linge un "tas de vêtements". Ce nom est utilisé pour indiquer un endroit quelque peu désordonné où la mémoire peut être allouée et désallouée à volonté. La structure des données (comme le lien Wikipédia auquel vous faites référence le souligne) est assez différente.
La collision de noms est malheureuse, mais pas si mystérieuse. Heap est un petit mot courant utilisé pour désigner une pile, une collection, un groupe, etc. L'utilisation du mot pour la structure de données précède (j'en suis sûr) le nom du pool de mémoire. En fait, la piscine aurait été un bien meilleur choix pour ce dernier, à mon avis. Heap connote une structure verticale (comme une pile), qui correspond à la structure de données, mais pas au pool de mémoire. Nous ne considérons pas un tas de pool de mémoire comme hiérarchique, alors que l'idée fondamentale derrière la structure de données est de garder le plus grand élément en haut du tas (et des sous-tas).
Heap la structure des données remonte au milieu des années 60; tas de mémoire, le début des années 70. Le terme tas (qui signifie pool de mémoire) a été utilisé au moins dès 1971 par Wijngaarden dans les discussions sur Algol.
Peut-être que la première utilisation du tas comme structure de données se trouve sept ans plus tôt dans
Williams, JWJ 1964. "Algorithm 232 - Heapsort", Communications of the ACM 7 (6): 347-348
En fait, lire sur la façon dont la mémoire est allouée (voir Buddy Blocks ) me rappelle un tas de structures de données.
OMI c'est simplement un accident / coïncidence que ces deux choses totalement indépendantes aient le même nom. C'est comme un graphique et un graphique .
Une structure de données semblable à un tas est utilisée par l'algorithme de recherche d'allocation de mémoire disponible. Ce qui suit est extrait de http://www.cprogramming.com/tutorial/virtual_memory_and_heaps.html .
Quand
new
est invoqué, il commence à rechercher un bloc de mémoire libre qui correspond à la taille de votre demande. En supposant qu'un tel bloc de mémoire soit trouvé, il est marqué comme réservé et un pointeur vers cet emplacement est renvoyé. Il existe plusieurs algorithmes pour accomplir cela car un compromis doit être fait entre le balayage de toute la mémoire pour trouver le plus petit bloc libre plus grand que la taille de votre objet, ou le retour du premier où la mémoire nécessaire tient. Afin d'améliorer la vitesse d'obtention d'un bloc de mémoire, les zones de mémoire libres et réservées sont conservées dans une structure de données similaire aux arbres binaires appelée tas.
Les termes familiers de mémoire de pile et de mémoire de tas ne sont pas utilisés dans la norme C ++. La norme utilise le stockage statique, le stockage des threads, le stockage automatique et le stockage dynamique.
Plus d'informations peuvent être trouvées dans la section Stockage Duraction de la norme.
Par conséquent, du point de vue du langage et de la bibliothèque standard, il n'y a pas de confusion.
Q. Qu'est-ce qu'un tas? A. Un tas est une collection d'objets placés les uns sur les autres.
Réponse à votre question: le tas de mémoire et le tas binaire utilisent le même concept que vous connaissez. Les données sont stockées sous la forme d'un tas dans la mémoire dans le même ordre que celui écrit dans le programme alors que le tas binaire est une structure de données qui suit le même concept de stockage des données de manière ordonnée sous la forme d'un tas (Données en haut de l'autre). Dites-moi ce que vous pensez dans la section commentaires.
Peut-être que le premier tas de mémoire implémenté a été géré par une structure de tas?