2017-03-16 25 views
0

我有一個應用程序在C++中,我想實現基本的內存分析功能。編程基本的應用程序內存分析:如何計算創建的指針?

對於最重要和耗費內存的類,我在構造函數,複製構造函數和析構函數中包含一些代碼,用於計算和保存類的每個實例使用的內存量(代碼僅在宏# MEMPROFILE的定義是這樣的:。

class MyClass 
{ 
    MyClass(){ 
     #ifdef MEMPROFILE 
     calcAndSaveMemUsage(); 
     #endif 
    } 
... 
} 

類似地,析構函數相應地更新計數器這樣,每當分析宏定義一個新的實例一樣MyClass obj創建,內存消耗信息自動處理

有沒有辦法自動在指針上做類似的事情 - 無論是一般的,還是特定類的指針?對於實例,每次創建指針時自動增加一個計數器?

我想了解更多關於實現這一點的任何方法,無論是重載,包裝還是儀器。 PS:我知道可以幫助我剖析記憶的外部工具。我有興趣瞭解上面提到的特定事物。

+0

如何重載'new'和'new []'運算符? –

+0

也許不是你要找的東西,但是你可以使用'std :: shared_ptr'然後使用它的'use_count()'方法 – aguadoe

回答

1

不,這是不可能的。指針不是用戶定義的類型。另外,它們可以通過memcpy複製,這意味着編譯器甚至可能不知道它正在複製它們。在幕後,std::copy也可能在可能的情況下使用memcpy,所以這不僅僅是明確地致電memcpy,它會讓你感到沮喪。

+0

在這種情況下,不同的方法是怎麼樣的:代替包裝類或對象,重寫'memcpy','malloc'和或使用似乎被稱爲[分配掛鉤函數](https://msdn.microsoft.com/en-us/library/cy8c7wz5.aspx?f=255&MSPPError=-2147217396)? – Louis15

+0

@ Louis15:'memcpy'複製字節。這些字節是否包含0,1個或多個指針不能可靠地確定。至於創建指針,最簡單的方法是編寫'&object'並且根本不涉及函數。 – MSalters

相關問題