STL がメモリを割り当て、管理し、解放する方法をオーバーライドすることは可能ですか? 可能であれば、どのようにしますか?生メモリを処理するコードを 1 つのクラスまたはファイルに保持する方法でこれを行う方法はありますか?
プログラム全体でこれを実行して、メモリ使用量、タイミング、および有効期間の情報を追跡できるようにしたいと考えています。もちろん純粋に好奇心から!
STL がメモリを割り当て、管理し、解放する方法をオーバーライドすることは可能ですか? 可能であれば、どのようにしますか?生メモリを処理するコードを 1 つのクラスまたはファイルに保持する方法でこれを行う方法はありますか?
プログラム全体でこれを実行して、メモリ使用量、タイミング、および有効期間の情報を追跡できるようにしたいと考えています。もちろん純粋に好奇心から!
new
演算子を再定義し、ファイルの 1 つでそれを行うことができdelete
ます。
リンカーは、シンボルを解決するときに標準のものをオーバーライドします。
SO には、次のような多くの回答があります。new /delete のオーバーロードまたはその 1: How to track memory allocations in C++ (特に new/delete)。
Memtrackやthis oneのように、インターネット上にもそれを行うライブラリがいくつかあります。SO には、 C++ メモリ リーク自動検出ライブラリというリソースもあります。
動的ストレージ期間でデータを管理する標準ライブラリ クラスは、テンプレート引数の 1 つとしてアロケータを取ります。次に、クラスは、メモリ管理のためにアロケータのインスタンスを呼び出します。たとえば、コンテナにカスタムアロケータを提供しstd::vector<int, MyAllocator> somevec;
たり、提供したりできます。std::list<Node*, MyAllocator> someList;
これはallocators に関する SO Q&Aです。リンク先の回答には、アロケーターのスケルトン コードが含まれています。これは、出発点として適切です。