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
Barbara StreisandOriginal
2024-11-29 01:47:10395Durchsuche

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;
}

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 ...
  • Mit GCC 3.2.2 und höher:
export GLIBCPP_FORCE_NEW=1
  • Mit GCC 3.4 und später:
export GLIBCXX_FORCE_NEW=1

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!

Stellungnahme:
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