【问题标题】:C++ boost thread, is the following a legit memory leak?C ++ boost线程,以下是合法的内存泄漏吗?
【发布时间】:2013-07-28 07:58:54
【问题描述】:
#include <iostream>
#include <boost/thread/thread.hpp>
#include <malloc.h>

class callable {
  public:
    void operator()() {
      std::cout << "Thread Run" << std::endl;
    }
}

void run() {
  callable c;
  boost::thread t(boost::ref(c));
  t.join();
}

int main() {
  int alloc = mallinfo().uordblks;
  run();
  int leaked = mallinfo().uordblks - alloc;
  if(leaked)
    std::cout << "mem leak: " << leaked << std::endl;
  return 0;
}

它确实在屏幕上打印“mem leak: 336”,有人可以解释这是为什么吗? 我希望“泄漏”为 0。

【问题讨论】:

  • POSIX 或 C 标准未指定此函数 mallinfo。我真的怀疑这个功能。
  • 我建议将alloc 设为全局变量,并在程序的各个点添加类似于cout &lt;&lt; "Mem status: " &lt;&lt; mallinfo().uordblks - alloc &lt;&lt; std::endl; 的代码。这可以帮助您确定内存泄漏的位置。分享和享受。
  • @BobJarvis 好吧,在这个代码示例中,如果您将线程实例化注释掉,那么“泄漏”的内存为 0。
  • 这似乎是一个线索。

标签: c++ memory-leaks malloc boost-thread


【解决方案1】:

在具有 32 位 C int 类型的 64 位系统上,struct mallinfo 中的 int 字段可能 溢出并环绕到小值或负值,或者希望上限 INT_MAX。这是一个已知的 C 库问题,Devel::Mallinfo 不会尝试这样做 关于它的任何事情。请查看以下链接:

http://metacpan.org/pod/Devel::Mallinfo

我会建议你使用 POSIX 或 C 标准接受的其他函数..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-13
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 2013-12-18
    • 1970-01-01
    相关资源
    最近更新 更多