Подтвердить что ты не робот

Что означает это предупреждение 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)

Однако предупреждение появилось, несмотря на то, что ни одно из присваиваний не было выполнено.

Итак, мне интересно, что это означает на самом деле? У меня нет какого-то разрешения на память? (Но распределение удалось)

4b9b3361

Ответ 1

Это просто означает, что разрешения были изменены в особо большом блоке памяти.

Это может произойти из-за чего-то вроде вызова mprotect или когда происходит очень большое выделение или освобождение памяти - например, вызов mmap или munmap.

Первый список, который вы указываете, составляет около 320 МБ памяти, чтобы undefined, что, скорее всего, новое распределение, которое будет сначала помечено как undefined. Остальные устанавливают аналогичные блоки размером noaccess, которые, вероятно, связаны с освобождением памяти.