メモリ管理関数
このドキュメントでは、同時実行ランタイムに用意されているメモリ管理関数について説明します。これらの関数を使用すると、コンカレンシー方式でメモリの割り当てと解放を行うことができます。
ヒント
コンカレンシー ランタイムには既定のスケジューラが用意されているため、アプリケーションにスケジューラを作成する必要はありません。 タスク スケジューラを使用すると、アプリケーションのパフォーマンスを微調整できるため、同時実行ランタイムを初めて使用する場合は、並列パターン ライブラリ (PPL) または非同期エージェント ライブラリから始めることをお勧めします。
同時実行ランタイムには、同時にメモリのブロックの割り当てと解放を行うために最適化された、2 つのメモリ管理関数が用意されています。 concurrency::Alloc 関数は、指定されたサイズを使用してメモリのブロックを割り当てます。 concurrency::Free 関数は、Alloc
によって割り当てられたメモリを解放します。
Note
Alloc
関数と Free
関数は相互に依存しています。 Free
関数は、Alloc
関数を使用して割り当てたメモリを解放するためにのみ使用します。 また、Alloc
関数を使用してメモリを割り当てるときは、Free
関数のみを使用してそのメモリを解放します。
さまざまなスレッドまたはタスクから固定セットの割り当てサイズを割り当ておよび解放するときには、Alloc
関数と Free
関数を使用します。 同時実行ランタイムは、C ランタイム ヒープから割り当てられたメモリをキャッシュします。 同時実行ランタイムは、実行中のスレッドごとに個別のメモリ キャッシュを保持します。したがって、ランタイムは、ロックまたはメモリ バリアを使用せずにメモリを管理します。 アプリケーションでは、メモリ キャッシュがより頻繁にアクセスされるときに、Alloc
関数と Free
関数からより多くのメリットを得ることができます。 たとえば、Alloc
と Free
の両方を頻繁に呼び出すスレッドは、主に Alloc
または Free
を呼び出すスレッドよりも多くの利点を得ることができます。
Note
これらのメモリ管理機能を使用し、アプリケーションで大量のメモリを使用すると、アプリケーションは、予想よりも早くメモリ不足の状態になる可能性があります。 1 つのスレッドによってキャッシュされたメモリ ブロックは、他のスレッドでは使用できないため、1 つのスレッドが大量のメモリを保持している場合、そのメモリは使用できません。
例
Alloc
関数および Free
関数を使用してメモリ パフォーマンスを向上させる例については、「方法: Alloc および Free を使用してメモリ パフォーマンスを改善する」をご覧ください。