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
*this
とother
のアップストリーム・メモリー・リソースを比較します。other
がcache_aligned_resource
でない場合、false を返します。