cache_aligned_resource

[memory_allocation.cache_aligned_resource]

cache_aligned_resource は汎用メモリー・リソース・クラスであり、異なるメモリーリソースへのラッパーとして機能し、すべての割り当てがキャッシュライン境界でアライメントされ、フォルス・シェアリングを回避します。

フォルス・シェアリングの回避の詳細は、cache_aligned_allocator テンプレート・クラスのセクションを参照してください。

// <oneapi/tbb/cache_aligned_allocator.h> ヘッダーで定義 

namespace oneapi { 
namespace tbb { 
    class cache_aligned_resource { 
    public: 
        cache_aligned_resource(); 
        explicit cache_aligned_resource( std::pmr::memory_resource* ); 

        std::pmr::memory_resource* upstream_resource() const; 

    private: 
        void* do_allocate(size_t n, size_t alignment) override; 
        void do_deallocate(void* p, size_t n, size_t alignment) override; 
        bool do_is_equal(const std::pmr::memory_resource& other) const noexcept override; 
    }; 
} // namespace tbb 
} // namespace oneapi

メンバー関数

cache_aligned_resource()

std::pmr::get_default_resource() を介して、cache_aligned_resource を構築します。

explicit cache_aligned_resource(std::pmr::memory_resource *r)

メモリーリソース r 上に cache_aligned_resource を構築します。

std::pmr::memory_resource *upstream_resource() const

ベースとなるメモリーリソースへのポインターを返します。

void *do_allocate(size_t n, size_t alignment) override

要求された値を下回らないアライメントで、キャッシュライン境界に n バイトのメモリーを割り当てます。境界配置のため割り当てにはパディングが含まれることがあります。割り当てられたメモリーへのポインターを返します。

void do_deallocate(void *p, size_t n, size_t alignment) override

p が指すメモリーとパディングの割り当てを解除します。ポインター p は、do_allocate(n, alignment) によって取得する必要があります。事前にメモリー割り当てを解除してはなりません。

bool do_is_equal(const std::pmr::memory_resource &other) const noexcept override

*thisother のアップストリーム・メモリー・リソースを比較します。othercache_aligned_resource でない場合、false を返します。