smalloc
http://freshmeat.net/projects/smalloc/
あらかじめ大きな領域をとっておいて、その領域内で確保・開放を繰り返す・・・というライブラリを探していたのですが、案外みつかりません。boost::poolは単一型のみだし。
みつかった数少ないライブラリがこれです。とりあえず・・・うまく動いているみたい。
> ./mtest 1 mtest: 21121067 malloc calls in 10.07 seconds = 2096522.83 calls/second mtest: 21120620 free calls in 29.17 seconds = 724037.43 calls/second mtest: interrupted! > ./sys-mtest 1 mtest: 77973464 malloc calls in 66.29 seconds = 1176256.79 calls/second mtest: 77972843 free calls in 33.66 seconds = 2316166.26 calls/second mtest: interrupted!
上がsmallocのmalloc/freeで動かした場合、下がglibcのmalloc/freeで動かした場合。
mallocはsmallocの方が2倍速いですが、freeは1/3以下ですね。mallocとfreeの呼び出し回数が同一と考えると、トータルで見た場合glibcの方が1.4倍速い計算になります。
1.4倍程度で収まっているのなら、ものによってはsmallocを使った方が良い場合もあるし、そもそもベンチマークでのメモリ確保の手順がどんなものか、まだ見てないのでなんとも言えませんけど。