web-dev-qa-db-fra.com

Que signifie cet avertissement Valgrind? - perms set de plage d'adresses d'avertissement

Lorsque j'exécutais mon programme contre valgrind, j'ai rencontré l'avertissement suivant.

Warning: set address range perms: large range [0x4d59d040, 0x6159d040) (undefined)
Warning: set address range perms: large range [0x194f7030, 0x2d4f7050) (noaccess)
Warning: set address range perms: large range [0x3959d030, 0x6159d050) (noaccess)

Après quelques recherches sur Google, j'ai trouvé à ici qu'il s'agit d'un Diagnostic message, mostly for benefit of the Valgrind developers, to do with memory permissions, ce qui ne me dit pas grand-chose.

Mon programme alloue une grande quantité de mémoire sur le tas. (Peut atteindre 2-3 Go de RAM après tout un tas de realloc)

Cependant, l'avertissement est apparu malgré qu'aucune des allocations n'ait échoué.

Alors, je me demande ce que ce message signifie vraiment? Je n'ai pas de permission de mémoire? (Mais l'allocation a réussi)

73
Jimmy Lu

Cela signifie simplement que les autorisations ont changé sur un bloc de mémoire particulièrement volumineux.

Cela peut se produire en raison de quelque chose comme un appel à mprotect ou lorsqu'une allocation de mémoire ou une désallocation très importante se produit - un appel mmap ou munmap par exemple.

Le premier que vous répertoriez définit environ 320 Mo de mémoire sur undefined, ce qui est très probablement une nouvelle allocation, qui sera marquée comme non définie initialement. Les autres définissent tous deux des blocs de taille similaire sur noaccess, ce qui est probablement lié à une désallocation de mémoire.

70
TomH