Что означает это предупреждение Valgrind? - диапазон заданного диапазона адресов perms
Когда я запускал свою программу против valgrind, я столкнулся со следующим предупреждением.
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)
После некоторого googling я нашел в здесь, что это Diagnostic message, mostly for benefit of the Valgrind developers, to do with memory permissions
, который не говорит мне много.
Моя программа выделяет большой объем памяти в кучу. (Может достигать 2-3 ГБ оперативной памяти после целой группы realloc
)
Однако предупреждение появилось, несмотря на то, что ни одно из присваиваний не было выполнено.
Итак, мне интересно, что это означает на самом деле? У меня нет какого-то разрешения на память? (Но распределение удалось)
Ответы
Ответ 1
Это просто означает, что разрешения были изменены в особо большом блоке памяти.
Это может произойти из-за чего-то вроде вызова mprotect
или когда происходит очень большое выделение или освобождение памяти - например, вызов mmap
или munmap
.
Первый список, который вы указываете, составляет около 320 МБ памяти, чтобы undefined
, что, скорее всего, новое распределение, которое будет сначала помечено как undefined. Остальные устанавливают аналогичные блоки размером noaccess
, которые, вероятно, связаны с освобождением памяти.