Des allocations dynamiques avec new/delete
auraient lieu sur le free-store ,
tandis que malloc/free
opérations utilisent le tas .
J'aimerais savoir s'il y a une différence réelle dans la pratique.
Les compilateurs font-ils une distinction entre les deux termes? ( Magasin gratuit et tas , pas new/malloc
)
Réponses
Trop de publicités?Pour C++, la différence entre la boutique et le tas est devenu purement conceptuel. Comme un pot pour la collecte de bugs, et un pour la collecte des cookies. L'un est marqué d'une manière, l'autre d'une autre. Cette désignation est destinée à conduire à la maison le point que vous ne mélangez JAMAIS des "nouveaux" et "supprimer" avec "malloc", "realloc", ou "libre" (ou à peu des ensembles de niveau d'ailleurs).
Lors d'entrevues, il est bon de dire que le "new et delete utiliser le free store, malloc et free utiliser le tas; new et delete appeler le constructeur et le destructeur, respectivement, cependant malloc et free ne le font pas." Pourtant, vous entendrez souvent que les segments de mémoire sont vraiment dans la même zone, cependant, qui PEUVENT être spécifiques de compilateur, c'est-à-dire, il est possible que les deux peuvent désigner les différents espaces de mémoire piscines (je ne sais pas pourquoi il serait, cependant).
Voir http://www.gotw.ca/gotw/009.htm; il est possible de décrire les différences entre le tas et le libre-magasin de loin mieux que je le pouvais:
Gratuit-magasin:
Le magasin gratuit est l'un des deux dynamique de la mémoire zones affectées ou libéré par new/delete. Durée de vie des objets peut être de moins que le temps de stockage est alloués; c'est, gratuit stocker des objets peut avoir de la mémoire allouée sans étant immédiatement initialisé, et peut être détruit sans que la mémoire immédiatement libéré. Au cours de la période où le stockage est alloué mais en dehors de l'objet de la durée de vie, la le stockage peut être consulté et manipulé par un void*, mais aucun de la proto-objet non statiques les membres de la ou des fonctions de membre peut être consulté, ont leurs adresses prises, ou être manipulés.
Tas:
Le tas est la dynamique de la mémoire zone allouée/libéré par malloc/free et de leurs variantes. Note que bien que la valeur par défaut global new et delete pourrait être mise en œuvre en termes de malloc et free par un particulier compilateur, le tas n'est pas le même que free store et de la mémoire allouée dans un la zone ne peut être en toute sécurité libérés dans l'autre. La mémoire allouée à partir de la tas peut être utilisé pour les objets de la classe type de placement-nouvelle construction et explicite de la destruction. Si on les utilise, les notes sur free store durée de vie des objets appliquer de la même façon ici.
Mike Koval réponse du couvre la théorie assez bien. Dans la pratique, cependant, ils sont presque toujours de la même région de la mémoire -- dans la plupart des cas, si vous creusez dans l'implémentation du compilateur d' new
,, vous trouverez qu'il appelle malloc()
.
En d'autres termes: à partir de la machine point de vue, et de tas gratuit store sont la même chose. La distinction qui existe à l'intérieur du compilateur.
Pour rendre les choses encore plus confuses, avant l'avènement de C++, nous avons dit "en tas", pour signifier ce qui est maintenant appelé "free store."