2012-11-26 11 views
55

Kiedy uruchomiłem program przeciwko Valgrind, napotkałem następujące ostrzeżenie.Co oznacza ta ostrzeżenie Valgrind? - ustawiono zakres adresów ostrzeżeń perms

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) 

Po pewnym googling znalazłem w here że jest Diagnostic message, mostly for benefit of the Valgrind developers, to do with memory permissions, który nie powiedzieć wiele.

Mój program przydziela dużą ilość pamięci na stercie. (Może osiągnąć 2-3 GB pamięci RAM po całej serii realloc)

Jednak pojawiło się ostrzeżenie, mimo że żadna z alokacji nie powiodła się.

Więc, zastanawiam się, co ta wiadomość naprawdę oznacza? Nie mam jakiegoś pozwolenia na pamięć? (Ale alokacja się powiodła)

Odpowiedz

53

To po prostu oznacza, że ​​uprawnienia zostały zmienione na szczególnie dużym bloku pamięci.

To może się zdarzyć z powodu połączenia z numerem mprotect lub gdy nastąpi bardzo duża alokacja lub dealokacja pamięci - na przykład wywołanie mmap lub munmap.

Pierwsza z wymienionych pozycji ustawia około 320 MB pamięci na undefined, co jest najprawdopodobniej nowym przydziałem, który zostanie początkowo oznaczony jako niezdefiniowany. Pozostali obaj ustawiają bloki o podobnej wielkości do noaccess, co prawdopodobnie odnosi się do dealokacji pamięci.

+0

Rozumiem. Czy to jest coś, o co należy się martwić? (Domyślam się, że to nie jest "głównie z korzyścią dla programistów Valgrind"). –

+8

Rozszerzyłem i wyjaśniłem swoją odpowiedź, ale zasadniczo, nie, nie jest to ogólnie rzecz biorąc coś, o co musisz się martwić. – TomH

+0

Co się stanie, jeśli pojawi się pięć błędów kończących się na: (zdefiniowane) - (brak dostępu) - (zdefiniowane) - (brak dostępu) - (zdefiniowane)? –

Powiązane problemy