首先,我想知道如何TCmalloc
在 Ubuntu 中安装。然后我需要一个程序使用TCmalloc
. 然后我需要一个小程序来证明它TCmalloc
比PTmalloc
.
5 回答
我将提供另一个答案,因为安装它的方法比其他答案更简单:
Ubuntu 已经有一个 google perf 工具包:http ://packages.ubuntu.com/search?keywords=google-perftools
通过安装 libgoogle-perftools-dev,您应该获得开发 tcmalloc 应用程序所需的一切。至于如何实际使用 tcmalloc,请参见另一个答案。
安装:
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
很容易看到哪些对象泄漏了以及它们分配在哪里。
安装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 用于分配的内存优化,而不是用于分析,您可以这样做:
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
- tcmalloc在google perf tool中,安装指南可以在这里找到。
- 该示例包含在google perf 工具中
- 请参阅此处,性能说明部分