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?

39
demandé sur Tim Kuipers 2016-02-01 14:15:49

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.

17
répondu Piwi 2016-10-27 13:56:20

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.

8
répondu sylvain.joyeux 2016-09-22 15:45:05

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"!

5
répondu iksemyonov 2016-02-01 12:16:35

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"

2
répondu Fimbres 2017-08-31 01:15:53

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"

1
répondu Thorbjørn Martsum 2017-05-23 12:34:23