Aussi loin que la langue respective normes, C offre allocation dynamique de la mémoire uniquement par le biais de l' malloc()
de la famille, alors qu'en C++ la forme la plus commune de l'allocation est effectué par ::operator new()
. Le style C malloc est également disponible en C++, et de nombreux "bébé allocateur" exemples de l'utiliser comme base de répartition de fonction, mais je suis curieux de voir comment contemporains compilateurs de mettre en œuvre la production réelle de l'opérateur new.
Est-ce juste un wrapper mince autour d' malloc()
, ou est-il mis en œuvre fondamentalement différent sur le compte de la assez différente de l'allocation de mémoire le comportement typique d'un programme en C++ par rapport à un type de programme C?
[Edit: je crois que la principale différence est généralement décrit comme suit: Un programme C a de moins en moins, de plus, à long terme affectations, tout un programme C++ a de nombreuses, petites, de courte durée des allocations. N'hésitez pas à carillon si c'est tromper, mais il semble que l'on aurait avantage à prendre en compte.]
Un compilateur comme GCC, il serait facile de n'avoir qu'une seule allocation de base de la mise en œuvre et l'utiliser pour toutes les langues, donc je me demande si il y a des différences dans les détails que d'essayer d'optimiser l'attribution de performance dans chaque langue.
Mise à jour: Merci à tous pour les réponses grands! Il ressemble dans GCC c'est complètement résolu par ptmalloc, et que MSVC utilise également malloc
à la base. Personne ne sait comment le MSVC malloc est mis en œuvre?