我有一個與某些DLL(或.so's)鏈接的測試應用程序。在我的主要應用程序,我定義的全球新/刪除這樣的:我該如何讓我的依賴項調用我的全局運算符new?
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的一個也將不勝感激。
編輯:也許我最初並不清楚,這個測試應用程序是爲了跟蹤在DLL中定義的一些自動生成的類的內存使用情況。創建我自己的分配器並在生成的代碼中使用STL結構不是一種選擇,更重要的是還有其他非STL分配。但看到答案,我認爲最好的選擇是使用分析器或者只是使用perfmon監視內存使用情況。
我們可以跟蹤您提到的方式跟蹤STL分配嗎?如何使用mystring?它不會調用我自己的新東西:( – bjskishore123 2010-10-31 07:22:03
@ bjskishore123 - 使用你可以跟蹤STL的分配情況,除了用你自己的分配器實現來替換ALLOCATOR外,你可以使用'mystring'類似'std :: string'。 – 2010-10-31 07:23:34
雖然你的答案在技術上是正確的,但它並不能真正幫助我,更重要的是,這些DLL是我的 - 它們沒有自己的'new'實現,我可以重新編譯它們以使用測試應用程序中的那個 - 如果我知道如何 – Zack 2010-10-31 08:20:53