2010-05-14 13 views
7
  1. De acuerdo con las publicaciones de 2008 (no puedo encontrarlo ahora), glibc heap check no funciona en entornos multiproceso. ¿Sigue siendo una situación ahora en 2010?
  2. ¿La comprobación de pila está habilitada de forma predeterminada? (gcc 4.1.2)? No configuro MALLOC_CHECK_, no tengo conocimiento de llamar a mcheck(), pero a veces recibo doble error de glibc libre con traza inversa. Tal vez está habilitado por alguna bandera de compilación?
+1

uso valgrind y la pregunta es un tanto discutible. http://valgrind.org/ – msw

+1

@msw valgrind es bueno y no colisionan. MALLOC_CHECK_ es mucho más liviano que valgrind y no requiere ninguna acción frp, usuario (por ejemplo, ejecutar la aplicación a través de lvalgrind, verificar la salida de valgrind) una vez que lo configures. Esta no es la situación con valgrind. De todos modos, mi pregunta no era sobre valgrind :) – dimba

Respuesta

3

De forma predeterminada, sin usar malloc_check_ o mcheck(), glibc realiza algunas pequeñas comprobaciones que no perjudican el rendimiento, como llamar dos veces gratis() en el mismo fragmento de memoria. Es por eso que está recibiendo algunos de estos mensajes, pero no tendrá todos los mensajes proporcionados por la API de sustitución de malloc que puede obtener utilizando MALLOC_CHECK_ (que están realizando muchas más pruebas, pero también mucha más CPU). Puede verificar esto activando un error y probándolo con y sin malloc_check_. Por ejemplo, para un simple double-free(), obtengo los errores "double free or corruption (top)" o "free(): invalid pointer" dependiendo cada vez que configuro MALLOC_CHECK_ o no.

Para responder a la pregunta 1, mcheck se basa en los ganchos de Malloc ya que existen (como 15 años), y no están destinados a ser seguros para subprocesos.

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

Cuestiones relacionadas