私はメモリプロファイラーを作成しようとしていますが、これまでのところ、カスタム関数を malloc、free、new、delete で機能させることができました。と を使用して、オーバーロードされた new メソッド内でオリジネーターをログに記録しよう__FILE__
と__LINE__
しましたが、(予想どおり) オーバーロードされた関数の場所の詳細が表示されるだけです。テスト対象のコンポーネントの既存のコードを変更せずに、オーバーロードされた関数のオリジネーターに関する詳細を取得する方法はありますか (malloc の #define など)。
私が使用している関数は次のとおりです。
void* operator new (size_t size)
{
if(b_MemProfStarted)
{
b_MemProfStarted = false;
o_MemLogFile << "NEW: " << "| Caller: "<< __FILE__ << ":"
<< __LINE__ << endl;
b_MemProfStarted = true;
}
void *p=malloc(size);
if (p==0) // did malloc succeed?
throw std::bad_alloc(); // ANSI/ISO compliant behavior
return p;
}
bool b_MemProfStarted は、ofstream と map.insert での再帰呼び出しを避けるために使用されます。