私はリークをチェックし、新しい/削除をオーバーロードすることによってメモリの消費量(ピークなど)をチェックするためにメモリを追跡したいと思います。オペレータを新規にオーバーロードし、トラックメモリに削除する方法は?
しかし、対応する新しい(ブーストを使って数行のコードを持つ単純なプログラムでさえ)の間に1つのdeleteが呼び出されることがあることに気付きました。別の方法(malloc? )、その削除は後にそれを解放することが幸せです。これは、情報(サイズ)を割り当てで保存する必要があるため、問題につながります。
次のメソッドがオーバーロードされていますが、1つの機能が欠落していますか?またはこれは私のC++コンパイラ/ブーストバージョンのバグですか?
void * operator new(size_t size);
void * operator new(size_t size, const std::nothrow_t&) noexcept;
void * operator new[](size_t size);
void * operator new[](size_t size, const std::nothrow_t&) noexcept;
void operator delete(void* ptr);
void operator delete[](void* ptr);
void operator delete(void* ptr, const std::nothrow_t&) noexcept;
void operator delete[](void* ptr, const std::nothrow_t&) noexcept;
私は「コード」解決策ではなく、特定のツール・ソリューションを使用することを好むので、私はまた、これは私がプログラムを実行できるようになります、(「valgrindのは使用できません)窓やmingwの-W64のgccのもとで実行していますほとんど普通です
私は以前もDrMemoryを使用していましたが、これは良いツールですが、実際にはプログラム中のメモリ割り当てを追跡したかった非常に遅く削除され、リークのように見えます)、またmingw-w64によるデバッグでのリンクはウィンドウ上では非常に遅いです。 – Renaud
@Renaud、問題は、Windowsのオブジェクトフォーマットがシンボルの上書きを本当にサポートしていないことと、Microsoftのランタイムはそれが喜んでいることです.Mingwにとっては、MicrosoftとC++のCランタイムのみを使用するほど悪くないはずですランタイム。 GNU LibCを使っているターゲットでは、GNU LibCにはアロケータを置き換えるためのフックがあるので、それはすべて簡単です。しかし、Windowsはそれをサポートしていません。 –