Share via


メモリ管理関数

このドキュメントでは、同時実行ランタイムに用意されているメモリ管理関数について説明します。これらの関数を使用すると、コンカレンシー方式でメモリの割り当てと解放を行うことができます。

ヒント

コンカレンシー ランタイムには既定のスケジューラが用意されているため、アプリケーションにスケジューラを作成する必要はありません。 タスク スケジューラを使用すると、アプリケーションのパフォーマンスを微調整できるため、同時実行ランタイムを初めて使用する場合は、並列パターン ライブラリ (PPL) または非同期エージェント ライブラリから始めることをお勧めします。

同時実行ランタイムには、同時にメモリのブロックの割り当てと解放を行うために最適化された、2 つのメモリ管理関数が用意されています。 concurrency::Alloc 関数は、指定されたサイズを使用してメモリのブロックを割り当てます。 concurrency::Free 関数は、Alloc によって割り当てられたメモリを解放します。

Note

Alloc 関数と Free 関数は相互に依存しています。 Free 関数は、Alloc 関数を使用して割り当てたメモリを解放するためにのみ使用します。 また、Alloc 関数を使用してメモリを割り当てるときは、Free 関数のみを使用してそのメモリを解放します。

さまざまなスレッドまたはタスクから固定セットの割り当てサイズを割り当ておよび解放するときには、Alloc 関数と Free 関数を使用します。 同時実行ランタイムは、C ランタイム ヒープから割り当てられたメモリをキャッシュします。 同時実行ランタイムは、実行中のスレッドごとに個別のメモリ キャッシュを保持します。したがって、ランタイムは、ロックまたはメモリ バリアを使用せずにメモリを管理します。 アプリケーションでは、メモリ キャッシュがより頻繁にアクセスされるときに、Alloc 関数と Free 関数からより多くのメリットを得ることができます。 たとえば、AllocFree の両方を頻繁に呼び出すスレッドは、主に Alloc または Free を呼び出すスレッドよりも多くの利点を得ることができます。

Note

これらのメモリ管理機能を使用し、アプリケーションで大量のメモリを使用すると、アプリケーションは、予想よりも早くメモリ不足の状態になる可能性があります。 1 つのスレッドによってキャッシュされたメモリ ブロックは、他のスレッドでは使用できないため、1 つのスレッドが大量のメモリを保持している場合、そのメモリは使用できません。

Alloc 関数および Free 関数を使用してメモリ パフォーマンスを向上させる例については、「方法: Alloc および Free を使用してメモリ パフォーマンスを改善する」をご覧ください。

関連項目

タスク スケジューラ
方法: Alloc および Free を使用してメモリ パフォーマンスを改善する