2010-11-29 11 views
2

boost::functionをタイマーマネージャの実装に使用することを検討しています。スケジュールタイマーではboost::functionが渡され、タイマー満了時にコールバックが実行されます。時間は、高い頻度で(〜1000回/秒)スケジュールされ/キャンセルされます。boost :: function memory usage

しかし、ヒープメモリの量に関しては、boost::functionが使用する可能性があります。

たとえば、boost::asioboost::functionを多く使用していますが、ライブラリのパフォーマンス要件はおそらく非常に高いです。

あなたはどう思いますか?

答えて

3

それはboost::functionのオーバーヘッドがタイマ管理コードにおけるゲーティング要因になるというのが私の意見ではそうです。

タイマーキューを取得すると、待機中のスレッドのロックとシグナリングが正確かつ効率的に行われ、脳サイクルが大幅に改善されます。逆に、もう1つの引数boost::functionまたはそれに類するもので、「生の」コールバックの頭痛を避けるためです。

2

boost :: functionはかなり小さいオブジェクトです。通常の関数ポインタの大きさがあれば、それは2-3倍の大きさであるかもしれません。

+0

私は割り当てられたデータのサイズに心配していません。新しい/削除すること自体については、 – dimba

+0

@dimba - あなたはファンクタのメモリを慎重にするならば、未処理のタイマーを追跡するために何か新しいものを持たなければなりませんそれに含めることはできないのですか? –

+0

@スティーブ私はあなたが何を意味しているか分かりません。ユーザーはScheduleTimer(boost :: function <>、...)のようなAPIを持つので、boost :: function <>は既にユーザーによって割り当てられています。違うやり方はできますか? 私は、各アクティブ・タイマーのために*無効格納することができますタイマー経営管理論(ACE)のための第三PARYライブラリを使用していますので、私は後押しする店舗の店舗ポインタする必要があります::機能を<>。何らかのメモリ割り当てを防ぐために何とか使用できますか? – dimba

2

this articleをご覧ください。多少の視点があるかもしれません。