我正在尝试了解堆分析和std线程,但是遇到了我无法理解的运行时错误。我的代码:
#include <memory>
#include <gperftools/heap-profiler.h>
#include <thread>
using namespace std;
void fcn1() // no leaks
{
HeapProfilerStart("temp1");
for(auto i=0; i<10000; i++)
{
unique_ptr<long long> t(new long long);
*t = 10;
}
HeapProfilerDump("partial1");
HeapProfilerStop();
}
int fcn2() // leaks
{
HeapProfilerStart("temp2");
for(auto i=0; i<10000; i++)
{
long* t = new long;
*t = 10;
}
HeapProfilerDump("partial2");
HeapProfilerStop();
}
int main(void)
{
thread t1(fcn1);
thread t2(fcn2);
t1.join();
t2.join();
return 0;
}
我遇到两个问题。
输出为:
Starting tracking the heap
Dumping heap profile to temp1.0001.heap (partial2)
HeapProfilerDump
调用,则没有文件输出,即没有任何输出。它应该在停止时不转储配置文件,还是必须手动完成?