メモリ断片化(フラグメンテーション)について

メモリも確保と解放を繰り返すことによって、ハードディスクと同じように断片化(フラグメンテーション)します。

特にサーバではデーモンとして同じプロセスが長時間稼働することが多いのでメモリ断片化が起きやすい環境です。

もちろんゲームのプログラムなどでも長時間プレイなどでメモリ断片化は進みます。

適当なプログラムになっているとパフォーマンス低下やフリーズを引き起こしたり、プロセスが落ちてしてしまうこともあります。

このようにメモリ断片化には注意が必要です。

メモリ関連の有名なライブラリ

世の中にはマルチコア環境のスケーラビリティ改善やメモリ断片化を考慮した便利なライブラリがありますので紹介しておきます。

jemalloc

jemallocは、FacebookのシステムやKVSのRedis、ログ関係でお世話になる事の多いfluentdなどで使用されていることで有名なメモリーアロケーションAPIライブラリです。

jemallocには以下のような特徴があります。

  • マルチスレッドスケーラビリティ性能の向上
  • メモリの断片化(フラグメンテーション)の軽減
  • メモリの使用に関する問題を検査・調査できる仕組みやツールの提供

tcmalloc (Google Performance Tools, gperftools)

tcmallocは、Googleが開発したメモリーアロケーションAPIライブラリです。

tcmallocには以下のような特徴があります。

  • マルチスレッドスケーラビリティ性能の向上
  • メモリの断片化(フラグメンテーション)の軽減
  • メモリの効率(使用量や断片化)と速度のどちらを優先するかビルド時に指定可能
  • メモリリークやCPU・ヒープの使用量などのプロファイリングが可能

まとめ

紹介したライブラリを使用すればメモリ関連処理を自分で工夫しなくても、安定したパフォーマンスと効率を手に入れることができます。

実績のあるプロジェクトで使用されているライブラリですので信頼性も十分です。

メモリ関連はプログラムにとって重要な部分ですので、これらのライブラリを使用する価値は十分あると思います。

解説サイトは沢山ありますので、興味を持たれた方はjemallocやtcmallocをぜひ使用してみて下さい。