1. ホーム
  2. c

[解決済み] このValgrindの警告は何を意味するのですか?- 警告 セットアドレス範囲 パーム

2023-05-05 18:58:26

質問

自分のプログラムを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)

ググってみると を見つけました。 であることがわかりました。 Diagnostic message, mostly for benefit of the Valgrind developers, to do with memory permissions であることがわかりますが、これではよくわかりません。

私のプログラムは、ヒープ上に大量のメモリを割り当てます。(大量の realloc 's)

しかし、いずれのアロケーションも失敗していないにもかかわらず、警告が表示されました。

このメッセージの本当の意味は何なのでしょうか?私は何らかのメモリ権限を持っていないのでしょうか? (ただし、割り当ては成功しました)。

どのように解決するのですか?

特に大きなメモリ ブロックでパーミッションが変更されたことを意味します。

これは、例えば mprotect を呼び出したり、非常に大きなメモリの割り当てや解放が発生した場合、つまり mmap または munmap のような呼び方をします。

最初に挙げたものは、約320Mbのメモリを undefined に設定しています。これはおそらく新しいアロケーションで、最初は未定義とマークされるでしょう。他のものは、両方とも同じようなサイズのブロックを noaccess に設定しており、これはおそらくメモリの割り当て解除に関連するものです。