web-dev-qa-db-ja.com

この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)

いくつかのグーグル検索の後、 hereDiagnostic message, mostly for benefit of the Valgrind developers, to do with memory permissions、それはあまり私に教えてくれません。

私のプログラムはヒープ上に大量のメモリを割り当てます。 (realloc 'sの束全体の後、2〜3 GBのRAMに到達できます)

ただし、割り当てに失敗したにもかかわらず警告が表示されました。

だから、私はこのメッセージが本当に何を意味するのだろうか?なんらかのメモリ許可がありませんか? (ただし、割り当ては成功しました)

73
Jimmy Lu

これは、特に大きなメモリブロックで権限が変更されたことを意味します。

これは、mprotectの呼び出し、または非常に大きなメモリ割り当てまたは割り当て解除が発生した場合(たとえば、mmapまたはmunmap呼び出し)に発生する可能性があります。

最初にリストするのは、約320MBのメモリをundefinedに設定することです。これは新しい割り当てである可能性が高く、最初は未定義としてマークされます。他は、同様のサイズのブロックをnoaccessに設定していますが、これはおそらくメモリの割り当て解除に関連しています。

70
TomH