cache_aligned_resource¶
[memory_allocation.cache_aligned_resource]
A cache_aligned_resource
is a general-purpose memory resource class, which acts as a wrapper to another memory resource
to ensure that all allocations are aligned on cache line boundaries to avoid false sharing.
See the cache_aligned_allocator template class section for more information about false sharing avoidance.
// Defined in header <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
Member Functions¶
-
cache_aligned_resource()¶
Constructs a
cache_aligned_resource
overstd::pmr::get_default_resource()
.
-
explicit cache_aligned_resource(std::pmr::memory_resource *r)¶
Constructs a
cache_aligned_resource
over the memory resourcer
.
-
std::pmr::memory_resource *upstream_resource() const¶
Returns the pointer to the underlying memory resource.
-
void *do_allocate(size_t n, size_t alignment) override¶
Allocates
n
bytes of memory on a cache-line boundary, with alignment not less than requested. The allocation may include extra memory for padding. Returns pointer to the allocated memory.
-
void do_deallocate(void *p, size_t n, size_t alignment) override¶
Deallocates memory pointed to by p and any extra padding. Pointer
p
must be obtained withdo_allocate(n, alignment)
. The memory must not be deallocated beforehand.
-
bool do_is_equal(const std::pmr::memory_resource &other) const noexcept override¶
Compares upstream memory resources of
*this
andother
. Ifother
is not acache_aligned_resource
, returns false.