【发布时间】:2009-06-14 19:45:25
【问题描述】:
在过去的几天里,我痛苦地学习了很多关于 C++ 编程的知识。
我喜欢它:)
我知道我应该释放内存——“每个 malloc=free”或“每个 new=delete”的黄金规则现在存在于我的世界中,但我将它们用于相当简单的对象。
向量呢?尽我所能,我都在使用 vector.clear() 但这显然还不够,因为我有大量的内存泄漏。
你能指导我如何处理这个东西吗?
*编辑
谢谢,您的 cmets 让我想到了这个应用程序的算法,我将能够完全消除向量。 :O
抱歉 - 我开始在这里解释我的用例,然后我发现了我真正需要的东西。就像你连续 3 天每天 18 小时编写代码一样:|
*编辑 2
这太疯狂了。通过对代码的微小更改,我将内存使用量从 2x130 mb(不断增长)减少到 2x 13.5mb,大小不变。谢谢你让我以另一种方式思考这个问题。
顺便说一句。这种自我代码审查有一个名字——有人记得吗?当你问任何人(甚至是你的母亲或狗)并开始解释你的问题时——突然间你自己解决了这个 5 小时的问题,只是试图从另一个角度看待它,或者只是试图总结它是什么所有关于。我经常发现自己被抓住了......
【问题讨论】:
-
由于您是内存管理的新手,也许您可以解释一下您是如何知道自己遇到内存泄漏的。一些衡量内存泄漏的方法并不能真正反映正在发生的事情。
-
您可能想发布一些示例代码,说明您如何使用矢量类。例如,您是否有指向动态创建对象的指针向量?
-
好吧,我只是看到我的应用程序的执行导致越来越多的内存占用。我正在执行相当简单的操作(在 2 个进程中生成 md5 哈希,与 mpcih2 绑定),对于我的测试,它恰好是 2500 万次操作。一个进程向其他数据包(字符串)发送数据,第二个进程为此计算哈希值。在执行结束时,我占用了 2x 130 mb。这太正常了。
-
仅晚了 9 年,但是将您的问题解释给人们/事物作为找出您自己的解决方案的一种方法有很多名称。我最常听到它被称为“灯柱”或“橡皮鸭”,但我敢肯定它还有其他流行的名字。
-
Rubberducking 确实是这样。
标签: c++ memory-management