2012-11-26 1 views
55

Когда я запускал свою программу против valgrind, я столкнулся со следующим предупреждением.Что означает это предупреждение Valgrind? - диапазон заданного диапазона адресов 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) 

Через некоторое Googling я нашел на here что это Diagnostic message, mostly for benefit of the Valgrind developers, to do with memory permissions, который не говорит мне много.

Моя программа выделяет большой объем памяти на кучу. (Может достигать 2-3 ГБ оперативной памяти после целой группы realloc's)

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

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

ответ

53

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

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

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

+0

Я вижу. Это то, о чем нужно беспокоиться? (Я предполагаю, что это не так, как «в основном, для разработчиков Valgrind»?) –

+8

Я немного расширил и уточнил свой ответ, но в основном, нет, это вообще не то, о чем вам нужно беспокоиться. – TomH

+0

Что делать, если в нем перечислены пять ошибок, заканчивающихся на: (определено) - (noaccess) - (определено) - (noaccess) - (определено)? –