标准库使用的重写内存分配方法? [重复]

问题描述 投票:0回答:2

是否可以重写STL分配、管理和释放内存的方式?如果可能的话,人们会怎样做呢?有没有一种方法可以将处理原始内存的代码保留在一个类或文件中?

我想对我的整个程序执行此操作,以便我可以跟踪内存使用情况、时间和生命周期信息。当然纯粹是出于好奇!

c++ memory-management stl
2个回答
7
投票

您可以通过在一个文件中重新定义运算符

new
delete
来实现这一点。

解析符号时,链接器将覆盖您的标准链接器。

你会在 SO 上找到很多很多答案,比如这个:重载 new/delete 或那个:如何跟踪 C++ 中的内存分配(尤其是 new/delete) .

互联网上也有一些库可以为您执行此操作,例如 Memtrackthis one 。 SO 还有一些相关资源:C++ 内存泄漏自动检测库 .


2
投票

管理具有动态存储持续时间的数据的标准库类采用 allocator 作为其模板参数之一。然后,该类将调用分配器的实例来进行内存管理。例如,您可以执行

std::vector<int, MyAllocator> somevec;
std::list<Node*, MyAllocator> someList;
为容器提供自定义分配器。

这是一个关于分配器的问答。链接指向的答案包括分配器的骨架代码,这对您来说应该是一个很好的起点。

© www.soinside.com 2019 - 2024. All rights reserved.