c++ - how - Valgrind reportando un desbordamiento de segmento
valgrind ubuntu (5)
¿Es este un problema de valgrind, o de mi programa?
No estoy seguro de la razón, pero creo que puedes ignorarlo. Al menos parece ser posible desencadenarla con programas legales. Contesté un similar / dublicate con un ejemplo aquí:
Informe de Valgrind "desbordamiento de segmento brk en el subproceso # 1"
Cuando ejecuto mi programa con valgrind / callgrind, recibo mucho el siguiente mensaje:
==21734== brk segment overflow in thread #1: can''t grow to 0x4a39000
(con diferentes direcciones)
Tenga en cuenta que no está precedido por un mensaje de desbordamiento de pila.
No puedo encontrar ninguna documentación en este mensaje y no tengo idea de qué está desbordando exactamente.
¿Alguien puede ayudarme a averiguar cuál es el problema? ¿Es este un problema de valgrind, o de mi programa?
Agregando a la respuesta de Piwi, a veces su programa requerirá que Callgrind use un segmento de brk más grande (hasta GB, dependiendo de su implementación).
Para modificar el límite codificado, vaya a la función VG_(ii_create_image)
en coregrind/m_initimg/initimg-linux.c
(alrededor de la línea 1000), cambie las siguientes líneas según sus necesidades
SizeT m1 = 1024 * 1024;
SizeT m8 = 8 * m1;
y reconstruir valgrind.
m8
es el tamaño máximo de segmento brk que callgrind intentará asignar
La línea 1327 del repo.or.cz/valgrind.git/blob/HEAD:/coregrind/m_syswrap/… apunta al manual del usuario, "vea la sección Limitaciones en el manual del usuario":
Sección de límites artículo 1:
En Linux, Valgrind determina en el inicio el tamaño del ''segmento brk'' utilizando RLIMIT_DATA rlim_cur, con un mínimo de 1 MB y un máximo de 8 MB. Valgrind emite un mensaje cada vez que un programa intenta extender el segmento brk más allá del tamaño determinado en el inicio. La mayoría de los programas funcionarán correctamente con este límite, por lo general, cambiando al uso de mmap para obtener más memoria. Si su programa realmente necesita un segmento grande de brk, debe cambiar el límite codificado de 8 MB y volver a compilar Valgrind.
Si bien esto no es realmente una respuesta, aún cumple con el requisito de OP "no se pudo encontrar ningún documento":
1) repo.or.cz/valgrind.git/blob/HEAD:/coregrind/m_syswrap/…
Contiene el mensaje discutido en la línea 1322.
2) http://sourceforge.net/p/valgrind/mailman/message/34068401/
es la confirmación que introdujo la característica, y el mensaje de confirmación correspondiente se lee
Author: florian
Date: Wed Apr 29 13:59:16 2015
New Revision: 15155
Log: Issue an error message if then brk segment overflows.
¡desde donde podemos seguir transmitiendo esta pregunta a aquellos que pueden dar una respuesta calificada a "qué significa exactamente" un segmento de brk se desborda "en este contexto"!
Valgrind solo asigna 8 MB para el segmento brk, que se agota. Uno informa que libc luego está cambiando a una asignación de memoria basada en mmap en el informe de error de valgrind que discute esto.