Nous surcharger le mondial nouveau et supprimer des opérateurs où je travaille pour de nombreuses raisons:
-
le regroupement de toutes les petites allocations -- diminue les frais généraux, diminue la fragmentation, peut augmenter les performances pour les petits-alloc-lourds des applications
-
encadrement des allocations avec une durée de vie -- ignorer tout le libère jusqu'à la fin de cette période, alors libre tous ensemble (il est vrai que nous ne la présente plus, avec la surcharge de l'opérateur local que global)
-
l'alignement de réglage -- à cacheline limites, etc
-
alloc de remplissage -- aider à exposer l'utilisation de variables non initialisées
-
gratuit remplir -- aider à exposer l'utilisation d'précédemment supprimés de la mémoire
-
retard de libre -- l'augmentation de l'efficacité de la libre de remplir, à l'occasion d'augmentation de la performance
-
les sentinelles ou aux poteaux de votre clôture -- contribuant à faire connaître les dépassements de mémoire tampon, flux de données, et parfois sauvage pointeur
-
la redirection des allocations -- pour tenir compte de NUMA, spécial zones de mémoire, ou même à garder à l'écart des systèmes distincts de la mémoire (par exemple de script incorporé langues ou Dsl)
-
la collecte des ordures ou le nettoyage -- encore utile pour ceux qui sont intégrés les langages de script
-
tas de vérification -- vous pouvez marcher à travers les tas de structure de données, tous les N allocations/libère pour s'assurer que tout semble ok
-
de la comptabilité, y compris la fuite de suivi et d'utilisation des instantanés et des statistiques (piles, la répartition de l'âge, etc)
L'idée de new/delete comptabilité est vraiment puissant et flexible: vous pouvez, par exemple, d'enregistrer l'ensemble de la pile des appels pour le thread actif, chaque fois qu'une alloc se produit, et l'ensemble de statistiques à ce sujet. Vous pourriez expédier la pile d'info sur le réseau si vous n'avez pas l'espace pour conserver localement pour quelque raison que ce soit. Les types d'informations que vous pouvez recueillir ici ne sont limitées que par votre imagination (et de la performance, bien sûr).
Nous utilisons globale surcharges parce que c'est commode pour accrocher beaucoup de communes de la fonctionnalité de débogage, ainsi que de faire le balayage des améliorations dans l'ensemble de l'application, basé sur les statistiques que nous recueillons à partir de ces mêmes surcharges.
Nous n'avons toujours utiliser des allocateurs pour les différents types trop; dans de nombreux cas, l'accélération ou fonctionnalités que vous pouvez obtenir en fournissant des allocateurs, par exemple, un seul point d'utilisation de la STL structure de données dépasse de loin le général speedup vous pouvez obtenir à partir de la global des surcharges.
Jetez un oeil à certains des allocateurs et le débogage de systèmes qui sont là pour le C/C++ et vous aurez rapidement de venir avec ces idées, et d'autres:
(Un vieux mais séminal livre est Écrit Solide Code, qui présente de nombreuses raisons que vous pourriez fournir des allocateurs en C, dont la plupart sont encore très pertinentes.)
Évidemment, si vous pouvez utiliser l'un de ces beaux outils que vous aurez envie de le faire plutôt que de rouler votre propre.
Il y a des situations dans lesquelles il est plus rapide, plus facile, moins d'une entreprise/juridique tracas, rien n'est disponible pour votre plate-forme encore, ou tout simplement plus instructif: creuser et à écrire un mondial de la surcharge.