スケーラブルなメモリー割り当て用の低水準インターフェイス。
extern "C" { // C メモリー・アロケーターのスケーラブル・バージョン void* scalable_malloc( size_t size ); void scalable_free( void* ptr ); void* scalable_calloc( size_t nobj, size_t size ); void* scalable_realloc( void* ptr, size_t size ); // _msize/malloc_size/malloc_usable_size のスケーラブル・バージョン size_t scalable_msize( void* ptr ); // posix_memalign のスケーラブル・バージョン int scalable_posix_memalign( void** memptr, size_t alignment, size_t size ); // アラインして割り当て void* scalable_aligned_malloc( size_t size, size_t alignment); void scalable_aligned_free( void* ptr ); void* scalable_aligned_realloc( void* ptr, size_t size, size_t alignment ); // scalable_allocation_* functions の戻り値 typedef enum { TBBMALLOC_OK, TBBMALLOC_INVALID_PARAM, TBBMALLOC_UNSUPPORTED, TBBMALLOC_NO_MEMORY, TBBMALLOC_NO_EFFECT } ScalableAllocationResult; typedef enum { // ラージ・メモリー・ページの使用のオン/オフ TBBMALLOC_USE_HUGE_PAGES, // アロケーターのメモリー使用量のしきい値を設定 // しきい値を超えると内部メモリーバッファーをクリーン TBBMALLOC_SET_SOFT_HEAP_LIMIT } AllocationModeParam; // アロケーター固有のアロケーション・モードを設定 int scalable_allocation_mode(int param, intptr_t value); typedef enum { // すべてのスレッドの内部アロケーター・バッファーをクリーン TBBMALLOC_CLEAN_ALL_BUFFERS, // 現在のスレッドの内部アロケーター・バッファーをクリーン TBBMALLOC_CLEAN_THREAD_BUFFERS } ScalableAllocationCmd; // アロケーター固有のコマンドを呼び出す int scalable_allocation_command(int cmd, void *param); }
#include "tbb/scalable_allocator.h"
これらの関数は、スケーラブル・アロケーターに C 水準のインターフェイスを提供します。scalable_allocation_mode および scalable_allocation_command を除き、scalable_x ルーチンはそれぞれ、x ライブラリー関数に似た動作を行います。下記の表に示されているように、ルーチンには 2 つのファミリーがあります。あるファミリーの scalable_x 関数で割り当てた記憶領域は、C 標準ライブラリー関数ではなく、同じファミリーの scalable_x 関数で解放またはサイズ変更してください。同様に、C 標準ライブラリー関数で割り当てた記憶領域は、scalable_x 関数で解放またはサイズ変更しないでください。
ファミリー |
割り当てルーチン |
割り当て解除ルーチン |
類似ライブラリー |
---|---|---|---|
1 |
scalable_malloc |
scalable_free |
C 標準ライブラリー |
scalable_calloc |
|||
scalable_realloc |
|||
scalable_posix_memalign |
POSIX* |
||
2 |
scalable_aligned_malloc |
scalable_aligned_free |
Microsoft® C ランタイム・ライブラリー |
scalable_aligned_realloc |
戻り値:
ptr がスケーラブル・アロケーターで割り当てたメモリーブロックを指している場合、メモリーブロックの使用可能なサイズ。ptr がそのようなブロックを指していない場合は 0。
引数 | 説明 |
---|---|
TBBMALLOC_USE_HUGE_PAGES |
scalable_allocation_mode(TBBMALLOC_USE_HUGE_PAGES, 1) は、オペレーティング・システムでサポートされている場合、アロケーターによる大容量ページの使用を有効にします。scalable_allocation_mode(TBBMALLOC_USE_HUGE_PAGES, 0) は無効にします。TBB_MALLOC_USE_HUGE_PAGES 環境変数を 1 に設定すると scalable_allocation_mode(TBBMALLOC_USE_HUGE_PAGES, 1) と同じ効果が得られます。scalable_allocation_mode() で設定されたモードは環境変数よりも優先されます。 戻り値: 大容量ページがプラットフォームでサポートされていない場合は TBBMALLOC_NO_EFFECT。 |
TBBMALLOC_SET_SOFT_HEAP_LIMIT |
scalable_allocation_mode(TBBMALLOC_SET_SOFT_HEAP_LIMIT, size) は、アロケーターが OS から取得するメモリー量のしきい値 size (バイト単位) を設定します。しきい値を超えると、アロケーターの内部バッファーからメモリーを解放しますが、必要な場合により多くのメモリーを要求することを阻むわけではありません。 |
引数 | 説明 |
---|---|
TBBMALLOC_CLEAN_ALL_BUFFERS |
scalable_allocation_command(TBBMALLOC_CLEAN_ALL_BUFFERS, 0) は、アロケーターの内部メモリーバッファーをクリーンして、メモリーのフットプリントを減らします。その結果、後続のメモリー割り当てリクエストにかかる時間は増えます。このコマンドは頻繁に使用されることを想定していません。パフォーマンスに与える影響を慎重に評価することを推奨します。 戻り値: バッファーが解放されなかった場合は TBBMALLOC_NO_EFFECT。 |
TBBMALLOC_CLEAN_THREAD_BUFFERS |
scalable_allocation_command(TBBMALLOC_CLEAN_THREAD_BUFFERS, 0) は、呼び出しスレッドの内部メモリーバッファーをクリーンします。その結果、後続のメモリー割り当てリクエストにかかる時間は増えます。パフォーマンスに与える影響を慎重に評価することを推奨します。 戻り値: バッファーが解放されなかった場合は TBBMALLOC_NO_EFFECT。 |