【问题标题】:Memory leaking and embedded linux内存泄漏和嵌入式linux
【发布时间】:2015-03-06 23:47:08
【问题描述】:

我在嵌入式 linux 中运行我自己的 c++ 程序。起初 VSZ 为 ~6000kB(顶部),但 1 小时后 VSZ 增加 ~100kB。在程序中有两个线程。两个线程几乎一直都使用 tcp 和 ssl 连接。 我用 valgrind 在 depian linux 中运行了相同的程序。 Valgrind 没有发现任何错误。我没有找到如何将 valgrind 编译到那个嵌入式 linux 的方法。 valgrind 是否有可能无法从线程中找到所有错误?你能帮我吗?

【问题讨论】:

  • 您如何断定内存使用量的增加是一个错误,而不是正确实现的内存分配?
  • 执行while(1) vector.push_back(1); 的程序很快就会耗尽内存,但不是严格意义上的内存泄漏。
  • 但是在程序的 edn 中应该释放这些。我的程序应该永远运行,但是当我用 valgrind 测试它时它会存在。我不明白 valgrind 应该在程序结束时找到类似的未释放内存。我已经多次查看我的代码,它只在启动时使用新的操作数。如果某个指针为空(被覆盖?),它会重新分配它,但也会打印错误,我没有看到任何错误。

标签: c++ memory-leaks tcp valgrind embedded-linux


【解决方案1】:

您不应该仅仅因为 VSZ 在一段时间后增加就得出您的程序“内存泄漏”的结论。这是正常的,尤其是程序正在接受网络连接。我推荐这个:

1 - 如果您使用busybox 的“top”,请安装procps 并使用它的“top”。它提供了有关内存状态的更好信息。

2 - 监控每个线程使用的堆栈。 satck 会随着时间的推移而增长,并将反映在 VSZ 中。

【讨论】:

    猜你喜欢
    • 2010-12-12
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多