Я пытаюсь написать профилировщик памяти, и до сих пор мне удалось заставить мои пользовательские функции работать для 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.