#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。
答案 0 :(得分:0)
在具有32位C int类型的64位系统上,struct mallinfo中的int字段可以 溢出并绕回小值或负值,或希望上限 INT_MAX。这是一个已知的C库问题,Devel :: Mallinfo不会尝试这样做 关于它的一切。请查看以下链接:
http://metacpan.org/pod/Devel::Mallinfo
我建议您使用POSIX或C标准接受的其他功能。