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)
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.