Подтвердить что ты не робот

Valgrind сообщает о переполнении сегмента

При запуске моей программы с valgrind/callgrind я получаю следующее сообщение:

==21734== brk segment overflow in thread #1: can't grow to 0x4a39000 (с разными адресами)

Обратите внимание, что ему не предшествует сообщение.

Я не могу найти документацию по этому сообщению, и я понятия не имею, что именно переполняется.

Может кто-нибудь помочь мне выяснить, в чем проблема? Это проблема valgrind или моей программы?

4b9b3361

Ответ 1

Строка 1327 из исходный код valgrind указывает на руководство пользователя ", см. раздел Ограничения в руководстве пользователя"

Пределы раздела 1:

В Linux Valgrind определяет при запуске размер сегмента "brk" с использованием RLIMIT_DATA rlim_cur с минимальным объемом 1 МБ и не более 8 МБ. Valgrind выводит сообщение каждый раз, когда программа пытается расширить сегмент brk за пределами размера, определенного при запуске. Большинство программ будут работать с этим пределом, как правило, переключаясь на использование mmap, чтобы получить больше памяти. Если вашей программе действительно нужен большой сегмент brk, вы должны изменить жесткий диск на 8 MB и перекомпилировать Valgrind.

Ответ 2

Valgrind выделяет 8MB для сегмента brk, который заканчивается. Сообщается, что libc затем переключается на распределение памяти на основе mmap в valgrind bugreport, обсуждая это.

Ответ 3

Хотя это не совсем ответ, он по-прежнему удовлетворяет требованиям OP "не удалось найти какие-либо документы":

1) http://repo.or.cz/valgrind.git/blob/HEAD:/coregrind/m_syswrap/syswrap-generic.c

содержит сообщение, обсуждаемое на линии 1322

2) http://sourceforge.net/p/valgrind/mailman/message/34068401/

- это фиксация, которая ввела эту функцию, и соответствующее сообщение фиксации читает

Author: florian
Date: Wed Apr 29 13:59:16 2015
New Revision: 15155

Log: Issue an error message if then brk segment overflows.

из которого мы можем еще раз передать этот вопрос тем, кто может дать квалифицированный ответ на вопрос "что именно делает" переполнение brk-сегмента "в этом контексте"!

Ответ 4

Добавляя к ответу Piwi, иногда вашей программе потребуется Callgrind для использования большего сегмента brk (до GB, в зависимости от вашей реализации).

Чтобы изменить жесткий диск, перейдите к функции VG_(ii_create_image) в coregrind/m_initimg/initimg-linux.c (около строки 1000), измените следующие строки в соответствии с вашими потребностями

SizeT m1 = 1024 * 1024;
SizeT m8 = 8 * m1;

и перестройте valgrind.

m8 - это максимальный размер сегмента brk, который callgrind будет пытаться выделить

Ответ 5

Является ли это проблемой valgrind или моей программы?

Я не уверен в причине, но я думаю, вы можете игнорировать ее. По крайней мере, возможно, это можно инициировать с помощью юридических программ. Я ответил на аналогичную /dublicate с примером здесь:

Сообщение Valgrind "переполнение сегмента BRK в потоке # 1"