2012-11-26 3 views
55

Als ich mein Programm gegen Valgrind ausgeführt habe, habe ich die folgende Warnung gefunden.Was bedeutet diese Valgrind-Warnung? - Warning Set Adressbereich Dauer

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) 

Nach einigen googeln fand ich bei here, dass es ein Diagnostic message, mostly for benefit of the Valgrind developers, to do with memory permissions ist, die mir nicht viel erzählen.

Mein Programm reserviert eine große Menge an Speicher auf Heap. (Kann erreichen 2-3 GB RAM nach einer ganzen Reihe von realloc)

Die Warnung erschien jedoch trotz keiner der Zuweisungen fehlgeschlagen.

Also frage ich mich, was diese Nachricht wirklich bedeutet? Ich habe keine Art von Speichererlaubnis? (Aber Zuordnung gelungen)

Antwort

53

Es bedeutet nur, dass die Berechtigungen auf einem besonders großen Speicherblock geändert.

Das kann passieren, etwa durch einen Anruf an mprotect oder wenn eine sehr große Speicherzuweisung oder Deallokation auftritt - ein mmap oder munmap Aufruf zum Beispiel.

Die erste, die Sie auflisten, setzt ungefähr 320 MB Speicher auf undefined, was höchstwahrscheinlich eine neue Zuweisung ist, die anfangs als undefiniert markiert wird. Die anderen setzen beide ähnlich große Blöcke auf noaccess, die wahrscheinlich eine Freigabe von Speicher betrifft.

+0

Ich sehe. Ist das etwas, um das man sich jemals Sorgen machen sollte? (Ich rate nicht, weil es "hauptsächlich für den Nutzen der Valgrind-Entwickler" ist?) –

+8

Ich habe meine Antwort ein bisschen erweitert und geklärt, aber im Grunde, nein, es ist im Allgemeinen nichts, worüber man sich Sorgen machen muss. – TomH

+0

Was passiert, wenn es fünf Fehler auflistet, die enden mit: (definiert) - (noaccess) - (definiert) - (noaccess) - (definiert)? –