- 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?
- ¿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?
Respuesta
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
- 1. Explotación del montón con Glibc 2.12.1
- 2. opción '-lmcheck' de glibc y multiprocesamiento
- 3. Límites y coherencia del mapa de Clojure
- 4. sobrecarga para un montón de montón vacío
- 5. compilando su propio glibc
- 6. funcionalidad glibc y SSE
- 7. Comprobación de paquetes instalados y si no se encuentra instalación
- 8. call gettid witin glibc
- 9. glibc, glib y gnulib
- 10. Sobrecarga de Spin Loop en términos de coherencia de caché
- 11. coherencia de atomicidad de la base de datos
- 12. usa una versión diferente de glibc
- 13. ¿alternativas de código abierto a la coherencia de Oracle?
- 14. Comprobación de variables de entorno
- 15. Gestión de montón multiproceso
- 16. ¿Cuánto tiempo lleva compilar Glibc?
- 17. Recibo este error: "glibc detectó"
- 18. ¿El montón es realmente un montón?
- 19. Hashcode de número entero coordenadas 3D con alta coherencia espacial
- 20. ¿Cuál es el punto de la coherencia del caché?
- 21. ataques de desbordamiento de montón
- 22. Cómo generar una suma de comprobación para un objeto java
- 23. comprobación de caracteres
- 24. C# comprobación de igualdad
- 25. Comprobación numérica de RegEx
- 26. tipo de montón 1-aria?
- 27. corrupción de montón detectado | C++
- 28. ¿Dónde obtiene glibc su base de datos de atributos Unicode?
- 29. ¿La implementación de glibc de fprintf() es segura para subprocesos?
- 30. No se puede ejecutar dex: espacio de montón de Java espacio de montón de Java
uso valgrind y la pregunta es un tanto discutible. http://valgrind.org/ – msw
@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