Переопределение «нового» и регистрация данных о звонящем
Я пытаюсь написать профилировщик памяти и до сих пор смог заставить мои пользовательские функции работать для malloc, free, new и delete. Я пытался с помощью__FILE__
а также__LINE__
для регистрации инициатора внутри перегруженного нового метода, но (как и ожидалось) он просто дает подробную информацию о том, где находится перегруженная функция. Есть ли способ получить подробные сведения об отправителе перегруженных функций без внесения каких-либо изменений в существующий код тестируемого компонента (например, #define для malloc)?
Я использую функцию:
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.