是否可以覆盖STL分配,管理和释放内存的方式?如果可能的话,一个人会怎么做?有没有办法以一种方式来保存处理原始内存的代码在一个类或文件中?
我想为我的整个程序执行此操作,以便跟踪内存使用情况,时间和生命周期信息。纯粹出于好奇当然!
答案 0 :(得分:4)
您可以通过重新定义某个文件中的运算符new
和delete
来实现这一目标。
在解析符号时,链接器将覆盖您的标准链接。
您会在SO上找到很多很多答案,例如:overloading new/delete或那一个:How to track memory allocations in C++ (especially new/delete)。
互联网上也有一些图书馆可供您使用,例如Memtrack或this one。 SO还有一些资源:C++ memory leak auto detection library。
答案 1 :(得分:1)
管理具有动态存储持续时间的数据的标准库类将allocator作为其模板参数之一。然后,该类将调用分配器的实例进行内存管理。例如,您可以std::vector<int, MyAllocator> somevec;
或std::list<Node*, MyAllocator> someList;
为容器提供自定义分配器。
这是SO Q&A about allocators。链接的答案包括分配器的框架代码,它应该是一个很好的起点。