C ++提升线程,是以下一个合法的内存泄漏?

时间:2013-07-28 13:16:38

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

#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。

1 个答案:

答案 0 :(得分:0)

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

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

我建议您使用POSIX或C标准接受的其他功能。