如何使用TCMalloc?

时间:2015-03-23 07:33:41

标签: tcmalloc

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

5 个答案:

答案 0 :(得分:5)

我会提供另一个答案,因为安装它的方式比其他答案更容易:

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

通过安装libgoogle-perftools-dev,您应该获得开发tcmalloc应用程序所需的全部内容。至于如何实际使用tcmalloc,请参阅其他答案。

答案 1 :(得分: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等。

答案 2 :(得分:1)

  1. tcmalloc 位于google perf tool,可在此处找到安装指南。
  2. 该示例包含在 google perf工具
  3. 请参阅here效果说明
  4. 部分

答案 3 :(得分:1)

安装:

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

很容易看出哪些物体泄漏,以及它们分配在哪里。

答案 4 :(得分:0)

如果您只想将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