是否有可用的函數可以獲取當前在堆上分配的內存塊數?它可以是Windows/Visual Studio特定的。獲取分配在堆上的塊的數量以檢測內存泄漏
我想使用它來檢查函數是否泄漏內存,而不使用專用的分析器。我想是這樣的:
int before = AllocatedBlocksCount();
foo();
if (AllocatedBlocksCount() > before)
printf("Memory leak!!!");
是否有可用的函數可以獲取當前在堆上分配的內存塊數?它可以是Windows/Visual Studio特定的。獲取分配在堆上的塊的數量以檢測內存泄漏
我想使用它來檢查函數是否泄漏內存,而不使用專用的分析器。我想是這樣的:
int before = AllocatedBlocksCount();
foo();
if (AllocatedBlocksCount() > before)
printf("Memory leak!!!");
有幾種方法可以做到這一點
的一種方法是之前使用_CrtMemCheckpoint()
功能(具體以附帶Microsoft Visual Studio中CRT)。並在您感興趣的電話之後,然後將其與_CrtMemDifference()
進行比較。
_CrtMemState s1, s2, s3;
_CrtMemCheckpoint (&s1);
foo(); // Memory allocations take place here
_CrtMemCheckpoint (&s2);
if (_CrtMemDifference(&s3, &s1, &s2)) // Returns true if there's a difference
_CrtMemDumpStatistics (&s3);
還可以列舉使用_CrtDoForAllClientObjects()
所有分配的塊,和一對夫婦的使用Visual C++ CRT的調試程序的其他方法。
注:
<crtdbg.h>
頭。_DEBUG
宏聯)
只是運行你的代碼在一個循環,並檢查了任務管理器:P – Alon 2013-03-27 14:59:19
可用於作爲替代,如果沒有這樣的功能可用,是的。但並非總是如此,有些函數不能運行循環,因爲它們從套接字等中讀取,並且服務器不會重新發送相同的數據。有時狀態會改變,並且功能不能再次以相同的方式運行。這隻能用於非常簡單的功能。 – sashoalm 2013-03-27 15:00:50
@Alon在分配的堆內存和保留的OS(任務)內存之間可能存在巨大的差異。 – 2013-03-27 15:10:02