5

Linux よりも OSX 10.8.2 の方が著しく遅い C++ プログラムがあります。プロファイリングによると、free の呼び出し (STL 操作、FWIW の結果) は OSX でははるかに遅くなります。これは、madvise を実行して呼び出し、そこでリアルタイムが消費されるためです。

OS/X のこの動作を調整する方法はありますか?

4

1 に答える 1

2

はい、そうです!

Linux で malloc/free にひどいパフォーマンスの問題があり、代替品を探し始めました。tbbmalloc (無料のところで、Intel TBB の一部) と Google malloc の2 つのオプションが思い浮かびました。大規模なテストの後、(2 つのうち) どちらが速いかは明確ではありませんでしたが、どちらも LIBC の実装よりも大幅に高速でした。

スムーズに動作していたので、tbbmallocを使用しました.google mallocにはバグがあり、仮想メモリが非常に大きくなり(予約されているがコミットされていません)、アプリにとって非常に悪いものでした(ITデーモンがそれを殺します)。

いいもの:

  • libc の malloc よりもはるかに優れたパフォーマンス。STL重いアプリで3倍~300倍でした。
  • シンプルな統合。コードの変更はありません。実行可能ファイルの makefile を 1 行追加/変更します。SO に変更はありません。

悪い人:

  • メモリ チェッカーは、代替品ではありません。memchk/valgrind/など用。元の malloc に戻します。
  • アプリは 10 ~ 30% 多くのメモリを必要とします。

私が開発したアプリは、数十 GB を使用し、数千万のさまざまな構造 (多数の STL マップ、ベクター、hash_map) を構築および破棄する CAD アプリケーションでした。

これを行う方法:

リンカー コマンドで-ltbbmalloc、ライブラリが lib 検索パス (-Lフラグ) にあることを確認します。

于 2013-12-11T08:24:39.540 に答える