覆盖内存分配方法标准库使用的方式?

4

是否有可能覆盖STL分配、管理和释放内存的方式?如果可能,怎么做?是否有一种方法可以保持处理原始内存的代码在一个类或文件中进行?

我希望能够为我的整个程序做到这一点,以便跟踪内存使用情况、时间和生命周期信息。当然,这只是出于好奇!


是的...这很困难...而且是的...你能通过使用valgrind来实现相同的事情吗? - Alex Chamberlain
如果你在使用Linux系统,可以查看man(2) brk和sbrk。但是对于Windows系统我不清楚。 - Nbr44
1
你需要替换newdelete操作符,因此请快点去书店买《Effective C++》的第8章。 - TemplateRex
2个回答

7

尽管问题涉及STL模板中的分配器参数 - Sam Ginrich

2
标准库中管理动态存储数据的类需要一个分配器(allocator)作为其模板参数之一。该类将调用分配器实例来进行内存管理。例如,可以使用std::vector<int, MyAllocator> somevec;std::list<Node*, MyAllocator> someList;为容器提供自定义分配器。
这里有一个关于分配器的SO Q&A。链接中的答案包括一个分配器的框架代码,应该是您一个不错的起点。

哦耶,没错,我忘记了分配器是一个模板参数。我依稀记得它们被描述为编码复杂的事情,但我会试一试。 - Anne Quinn
1
实际上,制作一个基本的分配器非常容易。请查看我回答中包含的链接中概述的要求。此外,这里有一些骨架代码可以创建与标准库兼容的分配器 - https://dev59.com/w3RA5IYBdhLWcg3wyRF6#12529302 - 这应该是一个不错的起点。 - Captain Obvlious

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接