编写基本的应用程序内内存分析:如何计算创建的指针?
Programming a basic in-application memory profiling: how to count pointers that are created?
我有一个 C++ 应用程序,我想为其实现基本的内存分析功能。
对于最重要和消耗内存的 classes,我在构造函数、复制构造函数和析构函数中包含了一些代码,用于计算和保存每个实例使用的内存量 class(代码仅在定义宏 #MEMPROFILE 时运行。类似于:
class MyClass
{
MyClass(){
#ifdef MEMPROFILE
calcAndSaveMemUsage();
#endif
}
...
}
类似地,析构函数相应地更新计数器。这样,无论何时定义用于分析的宏并创建新实例,如 MyClass obj
,都会自动处理内存消耗信息。
有没有办法自动对指针做类似的事情——一般情况下,或者特定 class 的指针?例如,每次创建指针时自动增加一个计数器?
我有兴趣了解更多实现这一目标的方法,无论是重载、包装还是检测。
PS:我知道可以帮助我分析内存的外部工具。我有兴趣了解上面提到的那个特定问题。
不,那不可能。指针不是用户定义的类型。此外,它们可以被 memcpy
复制,这意味着编译器甚至可能不知道它正在复制它们。在幕后,std::copy
也可能在可能的情况下使用 memcpy
,因此不仅仅是对 memcpy
的显式调用会让您感到困惑。
我有一个 C++ 应用程序,我想为其实现基本的内存分析功能。
对于最重要和消耗内存的 classes,我在构造函数、复制构造函数和析构函数中包含了一些代码,用于计算和保存每个实例使用的内存量 class(代码仅在定义宏 #MEMPROFILE 时运行。类似于:
class MyClass
{
MyClass(){
#ifdef MEMPROFILE
calcAndSaveMemUsage();
#endif
}
...
}
类似地,析构函数相应地更新计数器。这样,无论何时定义用于分析的宏并创建新实例,如 MyClass obj
,都会自动处理内存消耗信息。
有没有办法自动对指针做类似的事情——一般情况下,或者特定 class 的指针?例如,每次创建指针时自动增加一个计数器?
我有兴趣了解更多实现这一目标的方法,无论是重载、包装还是检测。
PS:我知道可以帮助我分析内存的外部工具。我有兴趣了解上面提到的那个特定问题。
不,那不可能。指针不是用户定义的类型。此外,它们可以被 memcpy
复制,这意味着编译器甚至可能不知道它正在复制它们。在幕后,std::copy
也可能在可能的情况下使用 memcpy
,因此不仅仅是对 memcpy
的显式调用会让您感到困惑。