编写基本的应用程序内内存分析:如何计算创建的指针?

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 的显式调用会让您感到困惑。