У меня есть тестовое приложение, которое связано с некоторыми DLL (или .so). В моем основном приложении я определил глобальный новый / удалить как это:
void* operator new(size_t n)
{
....
}
void operator delete(void* p)
{
...
}
Но я заметил, что операторы вызываются только для тех вещей, которые я выделяю в моем основном приложении, но не для одной из библиотек DLL.
Как сделать так, чтобы выделения в DLL проходили через мой оператор new / delete? (Это также должно включать память, выделенную STL, поэтому, если в одной из DLL есть std :: string, я бы хотел, чтобы мой оператор new вызывался, когда STL выделяет свой внутренний буфер std :: string).
Меня больше интересует решение для Windows, но также будет полезно и решение для Linux.
edit: возможно, я изначально не был понятен, это тестовое приложение, которое я делал, предназначалось для отслеживания использования памяти для нескольких автоматически сгенерированных классов, определенных в DLL. Создать свой собственный распределитель и использовать его в сгенерированном коде структуры STL не вариант, более того, есть и другие не-STL распределения. Но, увидев ответы, я думаю, что лучше всего использовать профилировщик или просто отслеживать использование памяти с помощью perfmon.