Domanda

  1. Secondo i messaggi di 2008 (non riesco a trovare in questo momento), glibc mucchio controllare non funziona in ambiente multithreading. E 'ancora la situazione oggi nel 2010?
  2. controllo non mucchio abilitato di default? (GCC 4.1.2)? Non impostato MALLOC_CHECK_, non a conoscenza di chiamare MVerificare (), ma ancora a volte ricevo duplice errore glibc gratis con backtrace. Forse è abilitato da qualche bandiera compilation?
È stato utile?

Soluzione

Per impostazione predefinita, senza usare MALLOC_CHECK_ o MVerificare (), glibc fa alcune piccole controlli che non fa male le prestazioni, come chiamare due volte free () sullo stesso pezzo di memoria. Ecco perché si stanno ottenendo alcuni di questi messaggi, ma non avrà tutti i messaggi forniti dal malloc sostituto api si può ottenere utilizzando MALLOC_CHECK_ (che stanno facendo molti più test, ma molto più impegnativo per la CPU troppo). È possibile controllare questo innescando un errore, e testarlo con e senza MALLOC_CHECK_. Ad esempio, per un semplice doppio-free (), ottengo "doppio libero o la corruzione (in alto)" o. "Free (): puntatore non valido" errori a seconda ogni volta che ho impostato MALLOC_CHECK_ o no

Per rispondere alla 1 / domanda, MVerificare si basa su ganci malloc dal momento che esiste (come 15 anni), e quelli che non sono destinati ad essere thread-safe.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top