Linux よりも OSX 10.8.2 の方が著しく遅い C++ プログラムがあります。プロファイリングによると、free の呼び出し (STL 操作、FWIW の結果) は OSX でははるかに遅くなります。これは、madvise を実行して呼び出し、そこでリアルタイムが消費されるためです。
OS/X のこの動作を調整する方法はありますか?
Linux よりも OSX 10.8.2 の方が著しく遅い C++ プログラムがあります。プロファイリングによると、free の呼び出し (STL 操作、FWIW の結果) は OSX でははるかに遅くなります。これは、madvise を実行して呼び出し、そこでリアルタイムが消費されるためです。
OS/X のこの動作を調整する方法はありますか?
はい、そうです!
Linux で malloc/free にひどいパフォーマンスの問題があり、代替品を探し始めました。tbbmalloc (無料のところで、Intel TBB の一部) と Google malloc の2 つのオプションが思い浮かびました。大規模なテストの後、(2 つのうち) どちらが速いかは明確ではありませんでしたが、どちらも LIBC の実装よりも大幅に高速でした。
スムーズに動作していたので、tbbmallocを使用しました.google mallocにはバグがあり、仮想メモリが非常に大きくなり(予約されているがコミットされていません)、アプリにとって非常に悪いものでした(ITデーモンがそれを殺します)。
いいもの:
悪い人:
私が開発したアプリは、数十 GB を使用し、数千万のさまざまな構造 (多数の STL マップ、ベクター、hash_map) を構築および破棄する CAD アプリケーションでした。
これを行う方法:
リンカー コマンドで-ltbbmalloc
、ライブラリが lib 検索パス (-L
フラグ) にあることを確認します。