Valgrind signale un dépassement de secteur
lors de l'exécution de mon programme avec valgrind / callgrind je reçois souvent le message suivant:
==21734== brk segment overflow in thread #1: can't grow to 0x4a39000
(avec des adresses différentes)
notez qu'il n'est pas précédé d'un message de débordement de pile.
Je ne trouve aucune documentation sur ce message et je n'ai aucune idée de ce qui déborde exactement.
quelqu'un Peut-il m'aider à comprendre quel est le problème? Est-ce un problème de valgrind, ou de mon programme?
5 réponses
ligne 1327 du valgrind source code points au manuel d'utilisation, "voir la section Limitations dans le manuel d'utilisation":
section des limites rubrique 1:
sous Linux, Valgrind détermine au démarrage la taille du "segment brk" en utilisant le RLIMIT_DATA rlim_cur, avec un minimum de 1 MB et un maximum de 8 MB. Valgrind affiche un message chaque fois qu'un programme essaie d'étendre le brk segment au-delà de la taille, déterminée au démarrage. La plupart des programmes fonctionneront correctement avec cette limite, typiquement en passant à l'utilisation de mmap pour obtenir plus de mémoire. Si votre programme a vraiment besoin d'un grand segment brk, vous devez changer la limite de 8 Mo hardcoded et recompiler Valgrind.
Valgrind n'alloue que 8MB pour le segment brk, qui est épuisé. On rapporte que libc est en train de passer à une allocation de mémoire basée sur mmap dans le valgrind bugreport discutant de cela.
bien qu'il ne s'agisse pas vraiment d'une réponse, elle satisfait quand même à L'exigence des OP "je n'ai trouvé aucun docs":
1) http://repo.or.cz/valgrind.git/blob/HEAD:/coregrind/m_syswrap/syswrap-generic.c
contient le message discuté à la ligne 1322
2) http://sourceforge.net/p/valgrind/mailman/message/34068401 /
est le commit qui a introduit le fonction, et le message de propagation correspondant se lit
Author: florian
Date: Wed Apr 29 13:59:16 2015
New Revision: 15155
Log: Issue an error message if then brk segment overflows.
d'où nous pouvons relayer cette question à ceux qui peuvent donner une réponse nuancée à "qu'est-ce que fait exactement" un débordement de segment brk"signifie dans ce contexte"!
ajouter à la réponse de Piwi, parfois votre programme aura besoin de Callgrind pour utiliser un plus grand segment brk (jusqu'à GBs, selon votre mise en œuvre).
pour modifier la limite codée en dur, allez à la fonction VG_(ii_create_image)
dans coregrind/m_initimg/initimg-linux.c
(autour de la ligne 1000), changez les lignes suivantes en fonction de vos besoins
SizeT m1 = 1024 * 1024;
SizeT m8 = 8 * m1;
et reconstruire valgrind.
m8
est la taille de segment max brk que callgrind va essayer de allouer 151950920"
Est-ce un problème de valgrind, ou de mon programme?
je ne suis pas sûr de la raison, mais je pense que vous pouvez l'ignorer. Au moins, il semble possible de le déclencher avec des programmes juridiques. J'ai répondu à un similaire/dublicicate avec un exemple ici:
Valgrind reporting "brk segment de débordement dans le thread n ° 1"