2012-11-26 99 views
55

當我運行我的程序對valgrind時,我遇到了以下警告。此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) 

一些google搜索後,我發現在here這是一個Diagnostic message, mostly for benefit of the Valgrind developers, to do with memory permissions,它並沒有告訴我很多。

我的程序確實在堆上分配了大量的內存。 (在一大堆realloc之後可以達到2-3 GB的RAM)

但是,儘管沒有分配失敗,但仍出現警告。

所以,我想知道這個消息是什麼意思?我沒有某種內存許可? (但分配成功)

回答

53

這只是意味着權限在特別大的內存塊上發生了變化。

可以的,因爲像調用mprotect發生,或者當一個非常大的內存分配或釋放時 - 一個mmapmunmap呼籲例子。

您列出的第一個內存設置爲undefined大約320Mb的內存,這很可能是一個新的分配,它將被標記爲最初未定義。其他人都將類似大小的塊設置爲noaccess,這可能與內存釋放有關。

+0

我明白了。這是人們應該擔心的事情嗎? (我猜不是因爲它主要是爲了Valgrind開發者的利益嗎?) –

+8

我已經擴展並澄清了我的答案,但基本上,不,它通常不是您需要擔心的任何事情。 – TomH

+0

如果列出以下結尾的五個錯誤該怎麼辦?(已定義) - (noaccess) - (已定義) - (noaccess) - (已定義)? –

相關問題