Maison > développement back-end > C++ > Pourquoi Valgrind signale-t-il la mémoire toujours accessible avec un programme trivial utilisant `` ?

Pourquoi Valgrind signale-t-il la mémoire toujours accessible avec un programme trivial utilisant `` ?

Barbara Streisand
Libérer: 2024-11-29 01:47:10
original
380 Les gens l'ont consulté

Why Does Valgrind Report Still Reachable Memory with a Trivial Program Using ``?

Valgrind : la mémoire est toujours accessible avec un programme trivial utilisant

Cette question concerne un avertissement de Valgrind concernant la mémoire encore accessible dans un programme trivial qui inclut le en-tête.

Problème :

Un programme trivial qui inclut le l'en-tête produit un avertissement Valgrind concernant la mémoire encore accessible. Ceci est inattendu car aucun objet de la bibliothèque standard n'a été alloué dans le programme lui-même.

#include <iostream>

int main() {
  return 0;
}
Copier après la connexion

Réponse :

L'avertissement Valgrind n'est pas un bug, mais un fonctionnalité. De nombreuses implémentations de la bibliothèque standard C utilisent leurs propres allocateurs de pool de mémoire. La mémoire des objets détruits n'est pas immédiatement libérée et restituée au système d'exploitation, mais conservée dans le pool pour une réutilisation ultérieure. Les pools de mémoire ne sont pas non plus libérés à la fin du programme, ce qui amène Valgrind à signaler que la mémoire est toujours accessible.

Solution :

Il existe plusieurs façons de désactiver la mise en cache des pools. et forcer la STL à utiliser malloc et libérer de la mémoire dès que possible :

  • Avec GCC 2.91 à 3.1 :
g++ -D__USE_MALLOC ...
Copier après la connexion
  • Avec GCC 3.2.2 et versions ultérieures :
export GLIBCPP_FORCE_NEW=1
Copier après la connexion
  • Avec GCC 3.4 et plus tard :
export GLIBCXX_FORCE_NEW=1
Copier après la connexion

Remarques supplémentaires :

  • Cette solution peut ralentir le programme.
  • Ce ce comportement n'est pas un bug dans la bibliothèque, mais plutôt une fonctionnalité permettant d'améliorer les performances.
  • D'autres en-têtes, tels que et , n'ont pas ce problème car ils n'utilisent pas d'allocateurs de pool de mémoire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal