web-dev-qa-db-ja.com

TCMallocの使用方法

まず、UbuntuにTCmallocをインストールする方法を知りたいです。次に、TCmallocを使用するプログラムが必要です。次に、TCmallocPTmallocよりもうまく機能していることを示す小さなプログラムが必要です。

12
sudo

他の回答よりも簡単にインストールできる方法があるため、別の回答を提供します。

Ubuntuにはすでにgoogle perfツールのパッケージがあります: http://packages.ubuntu.com/search?keywords=google-perftools

Libgoogle-perftools-devをインストールすると、tcmallocアプリケーションの開発に必要なすべてのものが得られます。実際にtcmallocを使用する方法については、他の回答を参照してください。

5
juhist

インストール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などを編集できます。

3
Orient

インストール:

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

どのオブジェクトがリークし、どこに割り当てられたかを簡単に確認できます。

2
user3696279
  1. tcmallocgoogle perfツール にあります。インストールガイドはここにあります。
  2. この例はgoogle perf toolに含まれています
  3. こちら 、セクションパフォーマンスのメモを参照
1
大宝剑

分析ではなく、割り当てられたメモリの最適化のためだけに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
0
Dennis V.R.