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 が指すメモリー割り当てを解除します。ポインター pallocate(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 をタイプエイリアスとして定義できます。この場合、非メンバー関数には引数依存のルックアップによってのみ到達できます。

template<typename T, typename U>
bool operator==(const tbb_allocator<T>&, const tbb_allocator<U>&) noexcept

true を返します。

template<typename T, typename U>
bool operator!=(const tbb_allocator<T>&, const tbb_allocator<U>&) noexcept

false を返します。