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はもっと信用してもいいのかもしれない。