Я пытаюсь понять профилирование кучи и потоки 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;
}
У меня есть 2 проблемы, с которыми у меня возникают проблемы.
- Как есть, только первый файл сбрасывается (temp1.0001.heap).Почему это так?Разве это не должно ждать завершения обоих потоков перед завершением?Если я не рассматриваю это в многопоточной среде (то есть вызов fcn1, а затем fcn2), то появляются оба.Это проблема с gperftools или расой или как?
Вывод:
Starting tracking the heap
Dumping heap profile to temp1.0001.heap (partial2)
Если я закомментирую вызовы
HeapProfilerDump
, файл не будет выводиться, то есть ничего в дампе.Разве он не должен выгружать файл профиля, когда он останавливается, или это должно быть сделано вручную?