Heim > Backend-Entwicklung > C++ > Warum meldet Valgrind mit einem trivialen Programm, das „' verwendet, immer noch erreichbaren Speicher?

Warum meldet Valgrind mit einem trivialen Programm, das „' verwendet, immer noch erreichbaren Speicher?

Barbara Streisand
Freigeben: 2024-11-29 01:47:10
Original
333 Leute haben es durchsucht

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

Valgrind: Speicher mit trivialem Programm unter Verwendung von immer noch erreichbar

Bei dieser Frage geht es um eine Valgrind-Warnung über noch erreichbaren Speicher in einem triviales Programm, das den header.

Problem:

Ein triviales Programm, das den Der Header erzeugt eine Valgrind-Warnung über noch erreichbaren Speicher. Dies ist unerwartet, da im Programm selbst keine Objekte aus der Standardbibliothek zugewiesen wurden.

#include <iostream>

int main() {
  return 0;
}
Nach dem Login kopieren

Antwort:

Die Valgrind-Warnung ist kein Fehler, sondern ein Besonderheit. Viele Implementierungen der C-Standardbibliothek verwenden ihre eigenen Speicherpoolzuweiser. Speicher für zerstörte Objekte wird nicht sofort freigegeben und an das Betriebssystem zurückgegeben, sondern zur späteren Wiederverwendung im Pool gehalten. Die Speicherpools werden auch nicht freigegeben, wenn das Programm beendet wird, was dazu führt, dass Valgrind den Speicher als noch erreichbar meldet.

Lösung:

Es gibt mehrere Möglichkeiten, das Pool-Caching zu deaktivieren und zwingen Sie die STL, Malloc zu verwenden und Speicher so schnell wie möglich freizugeben:

  • Mit GCC 2.91 bis 3.1:
g++ -D__USE_MALLOC ...
Nach dem Login kopieren
  • Mit GCC 3.2.2 und höher:
export GLIBCPP_FORCE_NEW=1
Nach dem Login kopieren
  • Mit GCC 3.4 und später:
export GLIBCXX_FORCE_NEW=1
Nach dem Login kopieren

Zusätzliche Hinweise:

  • Diese Lösung kann das Programm verlangsamen.
  • Dies Verhalten ist kein Fehler in der Bibliothek, sondern eine Funktion zur Verbesserung der Leistung.
  • Andere Header, wie z und haben dieses Problem nicht, da sie keine Speicherpool-Zuweiser verwenden.

Das obige ist der detaillierte Inhalt vonWarum meldet Valgrind mit einem trivialen Programm, das „' verwendet, immer noch erreichbaren Speicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage