まず、UbuntuにTCmalloc
をインストールする方法を知りたいです。次に、TCmalloc
を使用するプログラムが必要です。次に、TCmalloc
がPTmalloc
よりもうまく機能していることを示す小さなプログラムが必要です。
他の回答よりも簡単にインストールできる方法があるため、別の回答を提供します。
Ubuntuにはすでにgoogle perfツールのパッケージがあります: http://packages.ubuntu.com/search?keywords=google-perftools
Libgoogle-perftools-devをインストールすると、tcmallocアプリケーションの開発に必要なすべてのものが得られます。実際にtcmallocを使用する方法については、他の回答を参照してください。
インストール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
などを編集できます。
インストール:
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;
}
このコードは、メモリがどのようにリークしているかを確認するのに役立ちます
次に、ライブラリをメイクファイルに追加します
-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 -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