次の方法で共有


メモリ管理関数

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

ヒントヒント

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

同時実行ランタイムは、同時実行方式でメモリのブロックを割り当ておよび解放するために最適化された 2 つのメモリ管理関数を提供します。Concurrency::Alloc 関数は指定したサイズを使用してメモリ ブロックを割り当てます。Concurrency::Free 関数によって割り当てられたメモリを解放するAlloc

[!メモ]

Alloc 関数と Free 関数は相互に依存しています。Free 関数は、Alloc 関数を使用して割り当てたメモリを解放する場合にのみ使用します。つまり、Alloc 関数を使用してメモリを割り当てた場合、そのメモリを解放するには Free 関数を使用するしかありません。

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

[!メモ]

これらのメモリ管理関数を使用しているときに、アプリケーションで大量のメモリが消費されると、アプリケーションが想定よりも早くメモリ不足状態になる場合があります。あるスレッドがキャッシュしたメモリ ブロックは他のスレッドでは使用できないため、あるスレッドが大量のメモリを確保した場合、そのメモリは使用できなくなります。

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

参照

処理手順

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

概念

タスク スケジューラ (同時実行ランタイム)