Frage

  1. Laut Posts aus dem Jahr 2008 (ich kann es momentan nicht finden), Glibc Heap Check Funktioniert nicht in einer multithread -Umgebung. Ist es jetzt noch Situation im Jahr 2010?
  2. Wird die Heap -Überprüfung standardmäßig aktiviert? (GCC 4.1.2)? Ich setze nicht malloc_check_, ich bin mir nicht bekannt, mCheck () anzurufen, aber manchmal erhalten Sie mit Backtrace einen doppelten kostenlosen GLIBC -Fehler. Vielleicht ist es durch eine Kompilierungsflagge aktiviert?
War es hilfreich?

Lösung

Standardmäßig führt Glibc ohne Verwendung malloc_check_ oder mCheck () einige kleine Überprüfungen durch, die die Leistung nicht schaden, z. Aus diesem Grund erhalten Sie einige dieser Nachrichten, aber Sie haben nicht alle Nachrichten, die von der Malloc -Ersatz -API zur Verfügung gestellt werden, die Sie mit malloc_check_ erhalten können (die weit mehr Tests durchführen, aber auch weitaus intensiver). Sie können dies überprüfen, indem Sie einen Fehler auslösen und ihn mit und ohne malloc_check_ testen. Zum Beispiel erhalte ich für einen einfachen doppelfreen () "doppelte freie oder Korruption (oben)" oder "Free (): Ungültige Zeiger" Fehler, je nachdem, wann immer ich malloc_check_ oder nicht festgelegt habe oder nicht.

Um die 1/ Frage zu beantworten, stützt sich MCheck auf Malloc -Hooks, da sie existieren (wie 15 Jahre), und diese sind nicht als Faden sicher.

Quellen: Glibc/malloc/malloc.c, http://sourceware.org/bugzilla/show_bug.cgi?id=9939

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top