是否可以覆盖 STL 分配、管理和释放内存的方式?如果可能的话,如何做到这一点?有没有办法将处理原始内存的代码保留在一个类或文件中?
我想为我的整个程序这样做,这样我就可以跟踪内存使用情况、时间和生命周期信息。当然纯粹出于好奇!
是否可以覆盖 STL 分配、管理和释放内存的方式?如果可能的话,如何做到这一点?有没有办法将处理原始内存的代码保留在一个类或文件中?
我想为我的整个程序这样做,这样我就可以跟踪内存使用情况、时间和生命周期信息。当然纯粹出于好奇!
您可以通过在其中一个文件中new
重新定义运算符来做到这一点。delete
解析符号时,链接器将覆盖您的标准链接器。
你会在 SO 上找到很多很多答案,比如这个:重载新/删除或那个:如何在 C++ 中跟踪内存分配(尤其是新/删除)。
互联网上也有一些图书馆可以为你做这件事,比如Memtrack或这个。SO 对此也有一些资源:C++ 内存泄漏自动检测库。
管理具有动态存储持续时间的数据的标准库类将分配器作为其模板参数之一。然后该类将调用分配器的一个实例以进行内存管理。例如,您可以为容器执行std::vector<int, MyAllocator> somevec;
或std::list<Node*, MyAllocator> someList;
提供自定义分配器。
这是关于分配器的 SO Q&A。链接指向的答案包括分配器的骨架代码,这对您来说应该是一个很好的起点。