Microsoftはmimallocメモリ割り当てシステムのコードを公開した

MicrosoftはMITライセンスに基づいてライブラリをオープンしました ミマロック もともと言語のランタイムコンポーネント用に作成されたメモリ割り当てシステムの実装から 甲賀 и リーン。 Mimalloc は、コードを変更せずに標準アプリケーションで使用できるように適合されており、malloc 関数の透過的な代替として機能します。 Windows、macOS、Linux、BSD、その他の Unix 系システムでの動作をサポートします。

mimalloc の主な特徴は、コンパクトな実装 (コードが 3500 行未満) と非常に高いパフォーマンスです。で 実行されたテスト mimalloc は、以下を含む競合するすべてのメモリ割り当てライブラリよりも優れたパフォーマンスを発揮しました。 ジェマロック, tcmalloc, snmalloc, rpmalloc и 買いだめ.

パフォーマンスを評価するには、既存の 標準テスト 一部のテストでは、mimalloc は他のシステムよりも何倍も高速です。たとえば、異なるスレッド間のオブジェクト移行のテストでは、mimalloc は tcmalloc および jemalloc より 2.5 倍以上高速であることが判明しました。同時に、ほとんどのテストでメモリ消費量の減少も観察され、状況によってはメモリ消費量が 25% 削減される場合もあります。

Microsoftはmimallocメモリ割り当てシステムのコードを公開した

高いパフォーマンスは、主にフリー リスト シャーディングの使用によって実現されます。 mimalloc は、64 つの大きなリストの代わりに、それぞれがメモリ ページにバインドされた一連の小さなリストを使用します。このアプローチにより断片化が軽減され、メモリ内のデータの局所性が高まります。メモリ ページは、同様のサイズのブロックのグループ化されたセットです。 64 ビット システムでは、ページ サイズは通常 XNUMX KB です。ページ内に占有ブロックが残っていない場合、ページは完全に解放され、メモリがオペレーティング システムに返されるため、メモリのコストが削減され、長時間実行されるプログラムの断片化が軽減されます。

ライブラリは、リンク段階で組み込むことも、すでにアセンブルされたプログラム (「LD_PRELOAD=/usr/bin/libmimalloc.so myprogram」) にロードすることもできます。図書館でも提供しています API 機能をランタイムに統合し、詳細な動作制御を行う場合、たとえば、遅延メモリ解放ハンドラーを接続したり、単調に増加する参照カウンターを接続したりする場合に使用します。アプリケーション内で複数の「ヒープ」を作成して使用し、異なるメモリ領域に分散することができます。ヒープ内に配置されたオブジェクトを個別に解放せずに、ヒープを完全に解放することもできます。

セーフ モードでライブラリを構築することが可能です。このモードでは、特別なメモリ チェック ページ (ガード ページ) がブロック境界で置き換えられ、ブロック分散のランダム化と解放されたブロックのリストの暗号化が使用されます。このような対策により、ヒープベースのバッファ オーバーフローを悪用する最も一般的な手法をブロックすることが可能になります。セーフ モードを有効にすると、パフォーマンスが約 3% 低下します。

mimalloc の特徴として、大きな断片化による肥大化の問題が発生しにくいことも挙げられます。最悪のシナリオでは、メモリ消費量はメタデータで 0.2% 増加し、分散メモリでは 16.7% に達する可能性があります。リソースにアクセスする際の競合を回避するために、mimalloc はアトミック操作のみを使用します。

出所: オープンネット.ru

コメントを追加します