tbb_allocator
[memory_allocation.tbb_allocator]
tbb_allocator
は、[allocator.requirements] ISO C++ セクションのアロケーター要件をモデル化するクラス・テンプレートです。
tbb_allocator
は、oneTBB の malloc ライブラリーが利用可能な場合はそれを介してメモリーの割り当てと解放を行いますが、利用できない場合は std::malloc
および std::free
を使用します。
// <oneapi/tbb/tbb_allocator.h> ヘッダーで定義
namespace oneapi {
namespace tbb {
template<typename T> class tbb_allocator {
public:
using value_type = T;
using size_type = std::size_t;
using propagate_on_container_move_assignment = std::true_type;
using is_always_equal = std::true_type;
enum malloc_type {
scalable,
standard
};
tbb_allocator() = default;
template<typename U>
tbb_allocator(const tbb_allocator<U>&) noexcept;
T* allocate(size_type);
void deallocate(T*, size_type);
static malloc_type allocator_type();
};
} // namespace tbb
} // namespace oneapi
メンバー関数
- T *allocate(size_type n)
n * sizeof(T)
バイトのメモリーを割り当てます。割り当てられたメモリーへのポインターを返します。
- void deallocate(T *p, size_type n)
p
が指すメモリー割り当てを解除します。ポインターp
がallocate(n)
メソッドの結果でない場合の動作は未定義です。メモリーがすでに割り当て解除されている場合の動作は未定義です。
- static malloc_type allocator_type()
oneTBB malloc ライブラリーが利用可能な場合は列挙タイプ
malloc_type::scalable
を返し、それ以外はmalloc_type::standard
を返します。
非メンバー関数
これらの関数は、2 つの tbb_allocator
インスタンスの比較操作を提供します。
template<typename T, typename U>
bool operator==(const tbb_allocator<T>&, const tbb_allocator<U>&) noexcept;
template<typename T, typename U>
bool operator!=(const tbb_allocator<T>&, const tbb_allocator<U>&) noexcept;
これらの関数が tbb_allocator
オブジェクトの二項演算式で使用できる限り、これらの関数が定義される名前空間を指定する必要はありません。例えば、実装では同じ未指定の名前空間でクラスと関数を定義し oneapi::tbb::tbb_allocator
をタイプエイリアスとして定義できます。この場合、非メンバー関数には引数依存のルックアップによってのみ到達できます。