这是堆碎片的标志吗?

时间:2011-07-31 18:22:23

标签: c++

为了测试我的对象是否有内存泄漏,我将其实例化10000次并将其删除10000次。之后,我的程序使用了大约500kb。我不认为我的物体在泄漏。

由于

2 个答案:

答案 0 :(得分:6)

至少在Linux上,C库不会因为你调用delete而将内存释放回操作系统。它将内存放在进程内的“空闲列表”中。因此,如果您使用topcat /proc/XXX/status之类的命令来衡量虚拟内存的使用情况,您将看到流程中所有内容消耗的大小,包括该空闲列表。

当您freedelete“大”对象时,C库只会将内存释放回系统。 “large”的定义类似于128K字节。

我怀疑Windows,Mac等的工作方式类似,但我不确定。

所以对你的问题的简短回答是“不,不一定”。

答案 1 :(得分:2)

根据您的课程实际包含和所做的内容,您所描述的内容可能会发生,即使您的课程没有泄漏。

某些标准库实现从内存池中分配类std::string类。

您应该使用valgrind之类的实际泄漏检查程序,而不是您的测试运行。