C++ google perftools显示std::string::_Rep::_S_create正在使用20gb的内存

C++ google perftools显示std::string::_Rep::_S_create正在使用20gb的内存,c++,memory,C++,Memory,我正在使用Google Perf工具分析我的程序,发现std::string::_Rep:_S_create上的内存不足。性能工具显示正在使用的20gb: 20526.0 92.1% 92.1% 20526.0 92.1% std::string::_Rep::_S_create 有人知道这可能是什么吗?到目前为止,我发现: 建议std::string分配器可以获取大块内存以避免调用new 由于exit()或类似的调用,无法调用std::string析构函数。到目前为止,我还没有在我的

我正在使用Google Perf工具分析我的程序,发现std::string::_Rep:_S_create上的内存不足。性能工具显示正在使用的20gb:

20526.0  92.1%  92.1%  20526.0  92.1% std::string::_Rep::_S_create
有人知道这可能是什么吗?到目前为止,我发现:

  • 建议std::string分配器可以获取大块内存以避免调用new
  • 由于exit()或类似的调用,无法调用std::string析构函数。到目前为止,我还没有在我的程序中找到任何证据
  • 还有其他关于我如何找到这个的想法吗

    谢谢


    编辑:


    通过我将libstdc++移动到共享并启用了GLIBCXX_FORCE_NEW,这似乎解决了这个问题。我仍然不清楚为什么这个问题会首先发生。有人有主意吗?

    也许你有很多非常大的字符串?这看起来像是read by
    pprof--text
    的输出。如果是这样,
    pprof--gv
    将为您提供调用图视图。将其与定期堆分配转储结合起来,以确定何时何地发生这种情况。我能以某种方式查看图形显示吗?当我尝试时,它会抱怨无法打开图形显示。您可以将调用图转储为您选择的格式:
    pprof--pdf
    ,例如,将
    pdf
    输出写入
    stdio
    。查看
    pprof--help
    了解更多文件格式。