C++ c+的智能内存概述+;销毁时容器的使用

C++ c+的智能内存概述+;销毁时容器的使用,c++,memory,memory-leaks,containers,C++,Memory,Memory Leaks,Containers,我正在研究我的代码,因为随着时间的推移,内存使用量(Windows报告)略有增加。我已经添加了VS2012中的调试功能来测试内存泄漏,但没有发现 因此,我正在研究我的容器(vector、deque等)是否在未经检查地增加 现在,我正在为每个容器编写手动检查,但我宁愿做一些聪明的事情,并在这个过程中学习新的东西。然而,我不知道如何开始 我要寻找的是一种自动更改容器分配的方法,以包括诸如文件和分配行位置之类的信息,并在调用析构函数时显示这些信息。这将使我能够看到是否有人增加到不成比例的大小 我更希望

我正在研究我的代码,因为随着时间的推移,内存使用量(Windows报告)略有增加。我已经添加了VS2012中的调试功能来测试内存泄漏,但没有发现

因此,我正在研究我的容器(vector、deque等)是否在未经检查地增加

现在,我正在为每个容器编写手动检查,但我宁愿做一些聪明的事情,并在这个过程中学习新的东西。然而,我不知道如何开始

我要寻找的是一种自动更改容器分配的方法,以包括诸如文件和分配行位置之类的信息,并在调用析构函数时显示这些信息。这将使我能够看到是否有人增加到不成比例的大小

我更希望我的代码不是透明的,有点像检查内存泄漏的“新”修改

谁能给我指出正确的方向吗

谢谢


Henrik

因为我不知道向量到底在做什么,所以我的提示可能太简单了。但是,如果您使用的是支持shrink_to_fit的C++11编译器


不时调用此函数可能会有所帮助。

除非需要,否则操作系统不会从进程中取消映射内存页。这会让人觉得你的记忆在不断增长,好像你有记忆泄漏一样。@Joachim Pileborg:这里面有一个真实的因素,但我认为它忽略了大局。。。大多数应用程序将很快达到内存使用的“高水位线”,在此之后,页面将被释放并重复使用,其频率大致与分配的频率相同,任何稳定的增长都会引起一些担忧——这表明存在漏洞或资源需求不断增长(例如,内存中的日志流,一种永远不会被清除的事件向量)。这与真正的RAM中的问题和交换的问题分开,这就是你的观察所适合的地方。@亨利克:C++标准中没有支持用标准模板参数拦截标准容器的容器大小调整…您可以使用自己的分配器实例化或替换自己的类型,但这需要对客户机代码进行大量更改或一些非常讨厌的
#define
s,您自己选择。@Tony:这正是我所担心的。我手动执行的容器大小检查尚未出现任何问题。我希望约阿希姆是对的,但我担心那太容易了。谢谢你到目前为止的评论@亨里克:听起来很棘手。。。一种想法是,有时它有助于限制流程运行期间进行的处理类型(例如,每次运行仅向其提供一种类型的请求),您可能会发现内存消耗的增长是特定于处理单个消息或消息子集的。另一个想法是:在进程关闭时进行一些内存日志记录或暂停,这样就可以知道在某些作用域退出与静态析构函数运行时,内存使用是否会突然下降;无论哪种方式,可能都能“二进制切碎”的问题。嗯,我没有测试“容量”。但是,我主要使用deque容器。这会有“增长”的趋势吗?