为了测试我的对象是否有内存泄漏,我将其实例化10000次并将其删除10000次。之后,我的程序使用了大约500kb。我不认为我的物体在泄漏。
由于
答案 0 :(得分:6)
至少在Linux上,C库不会因为你调用delete
而将内存释放回操作系统。它将内存放在进程内的“空闲列表”中。因此,如果您使用top
或cat /proc/XXX/status
之类的命令来衡量虚拟内存的使用情况,您将看到流程中所有内容消耗的大小,包括该空闲列表。
当您free
或delete
“大”对象时,C库只会将内存释放回系统。 “large”的定义类似于128K字节。
我怀疑Windows,Mac等的工作方式类似,但我不确定。
所以对你的问题的简短回答是“不,不一定”。
答案 1 :(得分:2)
根据您的课程实际包含和所做的内容,您所描述的内容可能会发生,即使您的课程没有泄漏。
某些标准库实现从内存池中分配类std::string
类。
您应该使用valgrind之类的实际泄漏检查程序,而不是您的测试运行。