c++ - 编程基本的应用程序内内存分析 : how to count pointers that are created?

标签 c++ pointers memory profiling wrapper

我有一个 C++ 应用程序,我想为其实现基本的内存分析功能。

对于最重要和消耗内存的类,我在构造函数、复制构造函数和析构函数中包含了一些代码,用于计算和保存类的每个实例使用的内存量(代码仅在宏#MEMPROFILE 时运行已定义。类似于:

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

类似地,析构函数相应地更新计数器。这样,无论何时定义用于分析的宏并创建一个新实例(如 MyClass obj),都会自动处理内存消耗信息。

有没有办法自动对指针做类似的事情——一般情况下,或者那个特定类的指针?例如,每次创建指针时自动增加一个计数器?

我有兴趣了解更多有关实现该目标的方法,无论是重载、包装还是检测。

PS:我知道可以帮助我分析内存的外部工具。我有兴趣了解上面提到的那个特定问题。

最佳答案

不,那是不可能的。指针不是用户定义的类型。此外,它们可以被 memcpy 复制,这意味着编译器甚至可能不知道它正在复制它们。在幕后,std::copy 也可能在可能的情况下使用 memcpy,因此不仅仅是对 memcpy 的显式调用会让您感到困惑。

关于c++ - 编程基本的应用程序内内存分析 : how to count pointers that are created?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42830340/

相关文章:

java - 使用方法的返回值和保留它们有什么区别?

c++ - 将指针字符串转换为整数

c++ - 为什么要在类定义中使用指针?

javascript - 为 Qt 文本片段创建鼠标悬停事件监听器

c - C 中使用指针的字符串连接

pointers - 什么时候指针是惯用的?

C动态分配的数组使用memset进行初始化

java - 使用 JNA 的 Memory 类是否存在内存泄漏问题?

c++ - 在 C++ 中多次声明函数和变量

c++ - CClientDC 和 CWnd::GetDC 有什么区别