【问题标题】:How To Use TCMalloc?如何使用 TCMalloc?
【发布时间】:2015-05-26 03:23:47
【问题描述】:

首先,我想知道如何在 Ubuntu 中安装TCmalloc。然后我需要一个程序使用TCmalloc。然后我需要一个小程序来证明TCmallocPTmalloc 工作得更好。

【问题讨论】:

  • 你所说的“工作得更好”是什么意思?更小的内存碎片?性能更快?如果是性能的话,tcmalloc 比 ptmalloc 应该比较容易证明,但是如果是内存碎片,可能就有点难了。
  • 性能更快。

标签: tcmalloc


【解决方案1】:

我将提供另一个答案,因为安装它的方法比其他答案更简单:

Ubuntu 已经有一个 google perf 工具包:http://packages.ubuntu.com/search?keywords=google-perftools

通过安装 libgoogle-perftools-dev,您应该获得开发 tcmalloc 应用程序所需的一切。至于如何实际使用tcmalloc,请看另一个答案。

【讨论】:

    【解决方案2】:

    安装:

    sudo apt-get install google-perftools
    

    在 Eclipse 或任何其他代码编写器中创建应用程序

    #include <iostream>
    #include <unistd.h>
    #include <vector>
    #include <string>
    
    using namespace std;
    
    class BigNumber
    {
    public:
    
    BigNumber(int i)
    {
      cout << "BigNumber(" << i  << ")" << endl;
      digits = new char[100000];
    }
    
    ~BigNumber()
    {
      if (digits != NULL)
        delete[] digits;
    }
    
    private:
    
    char* digits = NULL;
    
    };
    
    int main() {
      cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    
      vector<BigNumber*> v;
    
      for(int i=0; i< 100; i++)
      {
        v.push_back(new BigNumber(i));
      }
    
      return 0;
    }
    

    此代码将帮助您了解内存泄漏情况

    然后将库添加到您的 makefile 中

    -ltcmalloc
    

    在运行应用程序时,要创建堆文件,所以需要添加环境变量HEAPPROFILE=/home/myuser/prefix 并且文件 prefix.0001.heap 将在 /home/myuser 路径中创建

    运行应用程序并创建堆文件 检查堆文件

    pprof helloworld helloworld.0001.heap --text
    Using local file helloworld.
    Using local file helloworld.0001.heap.
    Total: 9.5 MB
      9.5 100.0% 100.0%      9.5 100.0% BigNumber::BigNumber
      0.0   0.0% 100.0%      0.0   0.0% __GI__IO_file_doallocate
    

    很容易看到哪些对象泄漏了以及它们分配在哪里。

    【讨论】:

    • 一些注意事项:(1)使用export设置变量。 (2) 如果设置正确,程序将在启动时将“Starting tracking the heap”打印到标准输出。
    【解决方案3】:

    安装TCMalloc

    sudo apt-get install google-perftools
    

    要以系统范围的方式替换分配器,我编辑/etc/environment(或从/etc/profile/etc/profile.d/*.sh 导出):

    echo "LD_PRELOAD=/usr/lib/libtcmalloc.so.4" | tee -a /etc/environment
    

    要在更窄的范围内执行相同操作,您可以编辑 ~/.profile~/.bashrc/etc/bashrc 等。

    【讨论】:

    • 我的经验表明,当 TCMalloc 以系统范围的方式安装时,只有 firefox 崩溃。 Ubuntu 16.04 上的所有其他程序都对此非常满意。
    • 要获取编译工具,请安装:sudo apt-get install google-perftools libgoogle-perftools-dev
    【解决方案4】:
    1. tcmallocgoogle perf tool,安装指南可以在这里找到。
    2. 该示例包含在 google perf 工具中
    3. 参见here性能说明部分

    【讨论】:

      【解决方案5】:

      如果您只想将 tcmalloc 用于分配的内存优化,而不是用于分析,您可以这样做:

      sudo apt -y install libgoogle-perftools-dev
      
      cc -O3 -ltcmalloc_minimal -fno-builtin-malloc \
       -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -o main main.c
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-21
        • 2014-08-28
        • 2012-02-23
        • 2011-05-11
        • 2021-02-22
        • 2017-08-16
        • 1970-01-01
        • 2018-03-26
        相关资源
        最近更新 更多