スレッド・ローカル・ストレージを利用して同期を軽減するシステムヒープからのメモリーの割り当ては、単純な処理ではありません。これは、システム・ランタイム・ライブラリーが、ヒープへのアクセス同期にロックを使用するためです。このロックの競合は、マルチスレッド化によってもたらされるパフォーマンスの妨げとなることがあります。この問題は、共有ロックを使用しない割り当て手法やサードパーティーのヒープ・マネージャーを使用することで解決できます。プラットフォーム向けにマルチスレッド・アプリケーションを効率的に開発するための手法について説明します。そのため、複数のスレッドが安全に使用できるようにするためには、共有ヒープへのアクセスを制御する同期が必要になります。必要となるためオーバーヘッドが生じます。すべてのメモリーの割り当てを直列化すると、スレッドが処理ではなく、ロックの待機に多くの時間を費やすことになり、より大きな問題を引き起こします。アプリケーションのヒープ競合問題が示されています。ヒープ割り当てルーチンとカーネル関数の呼び出しにアプリケーション実行時間のほとんどが費やされており、これらがボトルネックになっていることがわかります。有効利用されていない原因になっていることがわかります。つの関数をエクスポートします。使用する各スレッドのヒープを管理し、標準のシステムヒープへのアクセスを保護するロックを使用しないようにします。関数を使用して、アプリケーションで使用するすべてのスレッドに個別のヒープを割り当てることができます。フラグを使用して、この新しいヒープ上の同期を無効にできます。格納することで、アプリケーション・スレッドが、このヒープを使用して、いつでもメモリーの割り当てや解放を行えるようになります。この方法で割り当てたメモリーは、割り当てを行ったスレッドによって明示的に解放する必要があります。関数を使用してヒープ競合を回避する方法について示します。使って各スレッドに割り当てられたヒープを記録しています。管理はプログラマーの責任で行う必要があります。互いに独立した複数のヒープを使用する方法だけでなく、その他の手法も併用することで、システムヒープを保護する共有ロックの競合を最小限に抑えることもできます。ルーチンを使用して、現在のスタックフレームからメモリーを割り当てることができます。このメモリーは、関数がリターンすると自動的に解放されます。ルーチンの使用を推奨しています。このルーチンは、要求されたサイズに応じて、スタックまたはヒープからメモリーを割り当てます。解放する必要があります。使用してシステムヒープからメモリーを割り当てます。通常ならメモリーを解放するはずの時点で、スレッドごとのリンクリストにメモリーを追加します。スレッドが同じサイズのメモリーを再び割り当てる場合は、システムヒープに戻らずに、リンクリストに格納されている割り当てを直ちに取得することができます。これらの手法でメモリー管理のボトルネックを解消できない場合は、サードパーティーのヒープ・マネージャーを使用してみると良いでしょう。使用したアプリケーションだけでなく、手動でスレッド化したアプリケーションにも使用できる、マルチスレッド化に対応したメモリー・マネージャーを提供します。利用ガイド最適化にはトレードオフが伴います。ここでは、システムヒープの競合を抑えることでメモリー使用量が増加します。スレッドごとに個別のプライベート・ヒープやオブジェクト群を保持するため、ほかのスレッドはこれらの領域にアクセスすることができません。生じることがあります。メモリー・インバランスは、アプリケーションのワーキング・セット・サイズやメモリー使用量の増加に繋がることがあります。通常、メモリー使用量の増加によるパフォーマンスへの影響はわずかです。メモリー使用量の増加により利用可能なメモリーを使い果たした場合は、例外が発生します。この場合、アプリケーションは終了するか、ディスクへスワップします。マルチスレッド・アプリケーションでは、共有リソースにアクセスするコード領域へのエントリーの同期をとるために、ロックが使用されます。ロックで保護されたコード領域を「クリティカル・セクション」と呼びます。アプリケーションをマルチスレッド化してパフォーマンスを向上させるのは骨の折れる作業です。Applications」の日本語参考訳です。サイトはエクセルソフト株式会社が運営しています。社名、製品名などは一般に各社の表示、商標または登録商標です。