- 2008年の投稿によると(現在は見つかりません)、glibcヒープチェックはマルチスレッド環境では機能しません。2010年も今もそうですか?
- ヒープチェックはデフォルトで有効になっていますか?(gcc 4.1.2)?MALLOC_CHECK_を設定せず、mcheck()の呼び出しに気づいていませんが、バックトレースでダブルフリーのglibcエラーが発生することがあります。多分それはいくつかのコンパイルフラグによって有効にされていますか?
1 に答える
デフォルトでは、malloc_check_ や mcheck() を使用しない場合、glibc は、同じメモリ チャンクで free() を 2 回呼び出すなど、パフォーマンスを損なわない小さなチェックを行います。そのため、これらのメッセージのいくつかを取得していますが、MALLOC_CHECK_ を使用して取得できる malloc 代替 API によって提供されるすべてのメッセージが表示されるわけではありません (これははるかに多くのテストを実行しますが、はるかに多くの CPU を集中的に使用します)。これは、エラーをトリガーし、malloc_check_ を使用して、または使用せずにテストすることで確認できます。たとえば、単純な double-free() の場合、MALLOC_CHECK_ を設定するかどうかに応じて、「二重解放または破損 (トップ)」または「free(): 無効なポインター」エラーが発生します。
1/ の質問に答えるために、mcheck は malloc フックが存在するため (15 年ほど) 依存しており、それらはスレッドセーフを意図していません。
ソース: glibc/malloc/malloc.c、http ://sourceware.org/bugzilla/show_bug.cgi?id=9939