braintag

公開してしまう備忘録

google-perftoolsをVisual C++ 2005で使用し tcmallocを使ってみる

google-perftoolsをVCで使ってみようとググッたけど、VCでのサンプルがあまりないので困った。
exampleにはgccの例しかないし。


ダウンロードしたファイルに、README.windowsというのがあったので読んでみる。
VC++7,VC++8で使えるらしい。ただ、VC++7は__VA_ARGS__がサポートされてないので注意しろと書いてある。可変引数のマクロだっけか。
VCでは、
heap-profilerとcpu-profilerとleak-checkerはまだ使えないらしい。(1.0時点)
つまり、tcmallocしか使えない。
この時点でやる気半減。


google-perftoolsのインストール

以下にてgoogle-perftoolsをダウンロード


google-perftools - Google Code
http://code.google.com/p/google-perftools/downloads/list

この時点でのバージョンは1.0

とりあえずコンパイルしてみる。
google-perftools.slnを開いてソリューションのビルド。


なんなく完了。


とりあえず、VC++にReleaseディレクトリとsrcディレクトリを登録。

かんたんなテスト

とりあえずテスト用のコンソールアプリを新規作成。

libtcmalloc_minimal.libをリンカに追加。

リンカの設定のシンボル参照の強制に_tcmallocを追加し、テストアプリと同じフォルダにlibtcmalloc_minimal.dllを追加。

スタティックリンクしたい場合はunittestのコードを参照しろとのことだけど面倒なのでパス。

#include <tcmalloc.h>
#include <boost/timer.hpp>

int main (int argc, char** argv)
{
  boost::timer t;
  int i,j;
  for (i = 0; i < 1000; i++) {
    for (j = 0; j < 1000; j++) {
      char *p = (char *) malloc (1024 * 1024);
      free (p);
    }
  }
  printf("%f[sec]\n",t.elapsed());
  return 0;
}

コンパイル。

google-perftools-1.0\src\tcmalloc.h(37) : fatal error C1083: include ファイルを開けません。'config.h': No such file or directory

怒られた。
includeに、\src\windowsフォルダも登録しなくてはいけないらしい。これもVCに登録し、再度ビルド。


ビルド成功。実行してみる。

速度の比較

1MBを100万回mallocした場合の比較。

tcmallocの場合 0.375[sec]
通常のmallocの場合 5.494[sec]

tcmalloc超早い。約15倍。

補足

newとdeleteでもちゃんと適用されてた。