2017-03-16 26 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

相关问题