5

C++ では、関数が失敗するたびに呼び出されるように設定できnewます。malloc失敗するたびに関数を呼び出す方法はありますか? malloc変更したくないサードパーティのライブラリから呼び出されていると仮定します。

移植可能な答えはないと思うので、プラットフォーム固有のものを喜んで受け入れます。一部のプラットフォームでは Linux+uclibc を使用し、他のプラットフォームでは Linux+glibc を使用しています。返すことができるsetrlimitメモリの量を制限するために使用する予定です。malloc

4

1 に答える 1

11

malloc失敗した場合は NULL を返します。あなたはそれを処理する必要があり、CRT メモリ機能からの他の障害 (realloc特に間違いやすい) に対処する必要があります。

一般的なケースでは、エラー時にリダイレクトするように独自に考案した関数で、すべての CRT のメモリ使用量をラップする必要があると思います。

Windows では、 Allocation Hook Functionsを使用して CRT にフックできます。これは、必要なことを行う方法である可能性があります。onallocこれにより、onrealloc、 、のロジックを介して効果的に CRT 呼び出しを処理するためのフックが提供されますonfree

私は Windows の人間なので保証はしませんが、Linux の malloc_hook はWindows のフックと同じものを提供しているようです。これらのメソッドは、実行時にすべて同じ CRT を使用すると仮定すると、サードパーティ ライブラリのコードを変更せずにすべての CRT メモリ呼び出しをキャプチャできるようにする必要があります。これは常に良い考えですが、少なくとも Windows では保証されていません...

于 2010-11-29T16:53:35.020 に答える