mallocはほんとに遅いの?

ふと、mallocはほんとに遅いのかどうか気になったので、確認。

int main()
{
  int i;

  tick_t before, after;
  int alloc_count = 0;

  before = tick();
  for ( i=0; i<COUNT; i++ ) {
    if ( alloc_count<(BUFSIZE/2) ) {
      buffer[alloc_count*2] = a(16);
    } else {
      buffer[(alloc_count-(BUFSIZE/2))*2+1] = a(16);
    }

    alloc_count++;
    if ( alloc_count >= BUFSIZE ) {
      int j;
      for ( j=0; j<alloc_count; j++ ) {
	f( buffer[j] );
      }

      alloc_count = 0;
    }
  }
  after = tick();
  printf("%u\n", (unsigned int)(after-before));  

  return 0;
}

だいたいこんな感じで、aとfを置き換えてmallocと16byte決め打ちカスタムアロケータで勝負。
したところ、大体、二倍弱くらいmallocのほうが遅かった。


うーん。カスタムアロケータはもうちょっと速くなると思ったんだけど、二倍にもならないのね。mallocはもっと信用してもいいのかもしれない。